我正在为名为“External
Database”的模型编写代码.
模型文件在类声明之外没有代码.我添加了index,new,show和_form .html.erb的视图页面.
config / routes.rb包含行资源:external_databases.该模型目前不包含嵌套资源.此应用程序中还声明了其他模型,但目前它们都没有与此模型交互,并且在声明资源之前它们都经过测试并且功能和关闭:external_databases.
我有一个从索引视图到new_external_database_path的链接,其行为与{:action =>完全相同“new”,:controller => “external_database”}如果我正确关注.
这理论上应该加载application / external_databases / new,它将呈现_form.html.erb. _form的第一行是<%= form_for(@ external_database)do | f | %GT; 使用/ new链接时会出现帖子标题中所述的问题. url application / external_databases / new出现以下错误: 没有路线匹配{:action =>“show”,:controller =>“external_databases”}
当我使用rails控制台创建数据成员时,它通过索引和显示正确显示. edit方法使用相同的_form文件,并成功编辑控制台创建的数据成员.毁灭也功能.
……那么为什么不认识新方法呢?
我的这个模型的控制器代码:
class ExternalDatabasesController < ApplicationController
def index
@external_databases = ExternalDatabase.all
respond_to do |format|
format.html # index.html.erb
format.json { render :json => @external_databases }
end
end
# POST /external_databases
# POST /external_databases.json
def new
@external_database = ExternalDatabase.new
respond_to do |format|
format.html # new.html.erb
format.json { render :json => @external_database }
end
end
def show
@external_database = ExternalDatabase.find(params[:id])
respond_to do |format|
format.html # show.html.erb
format.json {render :json => @external_database }
end
end
def create
@external_database = ExternalDatabase.new(params[:external_database])
respond_to do |format|
if @external_database.save
format.html {redirect_to @external_database, :notice => "New External Database Profile was created successfully!"}
format.json {render :json => @external_database, :status => :created, :location => @external_database}
else
format.html {render :action => "new"}
format.json { render :json => @external_database.errors, :status => :unprocessable_entity }
end
end
end
#GET /external_databases/1/edit
def edit
@external_database = ExternalDatabase.find(params[:id])
end
# PUT /external_databases/1
# PUT /external_databases/1.json
def update
@external_database = ExternalDatabase.find(params[:id])
respond_to do |format|
if @external_database.update_attributes(params[:external_database])
format.html {redirect_to @external_database, :notice => "External Database Profile was updated successfully!" }
format.json {head :ok}
else
format.html { redner :action => "edit" }
format.json {render :json => @external_database.errors, :status => :unprocessable_entity }
end
end
end
# DELETE /external_databases/1
# DELETE /external_databases/1.json
def destroy
@external_database = ExternalDatabase.find(params[:id])
@external_database.destroy
respond_to do |format|
format.html { redirect_to external_databases_rul }
format.json { head :ok }
end
end
end
更新:添加routes.rb和Views代码
我的routes.rb文件:
App::Application.routes.draw do
resources :type_as do
resources :type_bs
end
resources :type_bs do
resources :type_as
resources :type_cs
end
resources :type_cs do
resources :type_bs
end
resources :external_databases
root :to => "home#index"
end
浏览次数:
external_databases_form
<%= form_for(@external_database) do |f| %>
<div class="field">
<%= f.label :name %><br/>
<%= f.text_field :name %><br/>
</div>
<div class="field">
<%= f.label :description %><br/>
<%= f.text_field :description %><br/>
</div>
<div class="field">
<%= f.label :url %><br/>
<%= f.text_field :url %><br/>
</div>
<div class="actions">
<%= f.submit %>
</div>
<% end %>
index.html.erb
<p id="notice"><%= notice %></p>
<h1>External Databases</h1>
<table border="1">
<tr>
<th>Database Name</th>
</tr>
<% @external_databases.each do |exdb| %>
<tr>
<td><%= exdb.name %></td>
<td><%= truncate(exdb.description) %></td>
<td><%= link_to 'Show', exdb %></td>
<!-- link_to.... :target => "_blank" will open the url in a new window -->
<td><%= link_to 'Visit', exdb.url, :target => "_blank" %></td>
<td><%= link_to 'Edit', edit_external_database_path(exdb)%></td>
<td><%= link_to 'Destroy', exdb, :confirm => 'Are you sure?', :method => :delete %></td>
</tr>
<% end %>
</table>
<br/>
<%= link_to 'New External Database Profile', { :action => "new", :controller => "external_databases" }%> |
<%= link_to 'Home', root_path %>
new.html.erb
<h1>Creating a new External Database Profile</h1>
<%= render 'form' %>
<%= link_to 'Back', external_database_path %>
show.html.erb
<p id="notice"><%= notice %></p>
<table cellspacing="3" cellpadding="5" border="1">
<tr>
<th><b>External Database Name</b></th>
<th><b>Database ID</b></th>
</tr>
<tr>
<td><%= @external_database.name %></td>
<td><%= @external_database.id %></td>
</tr>
<tr colspan="2">
<th><b>URL</b></th>
</tr>
<tr colspan="2">
<td><%= @external_database.url %></td>
<td><%= link_to 'Visit External Database', @external_database.url %></td>
</tr>
</table>
<p>
<h3>Description</h3>
<!% @external_database.description.split.scan(/.{,60}/).each do |line| %>
<!%= line %><br/>
<!% end %>
</p>
<br /><br /><br />
<%= link_to 'Back to External Database Index', external_databases_path %> |
<%= link_to 'Edit', edit_external_database_path(@external_database) %> |
<%= link_to 'Destroy', :confirm => 'Are you sure?', :method => :delete %>
最佳答案 您的“返回”链接中的new.html.erb文件中有拼写错误.它应该是:
external_databases_path
您可以将它与上面show.html.erb中您自己的反向链接进行比较.
修复:new.html.erb
<h1>Creating a new External Database Profile</h1>
<%= render 'form' %>
<%= link_to 'Back', external_databases_path %>