Ruby on rails 轨道布线-:操作=>';新';返回错误“;同一控制器中没有与{:action=>;“show”匹配的路由
我正在为一个名为“ExternalDatabase”的模型编写代码 模型文件中没有类声明之外的代码。我为index、new、show和_form.html.erb添加了视图页面 config/routes.rb包含行Ruby on rails 轨道布线-:操作=>';新';返回错误“;同一控制器中没有与{:action=>;“show”匹配的路由,ruby-on-rails,rest,routing,Ruby On Rails,Rest,Routing,我正在为一个名为“ExternalDatabase”的模型编写代码 模型文件中没有类声明之外的代码。我为index、new、show和_form.html.erb添加了视图页面 config/routes.rb包含行resources:external_databases。此时该模型不包含嵌套资源。此应用程序中声明了其他模型,但目前没有任何模型与此模型交互,并且在声明resources:external之前,这些模型都经过测试,功能正常且已关闭_数据库 我在索引视图中有一个指向new\u ext
resources:external_databases
。此时该模型不包含嵌套资源。此应用程序中声明了其他模型,但目前没有任何模型与此模型交互,并且在声明resources:external之前,这些模型都经过测试,功能正常且已关闭_数据库
我在索引视图中有一个指向new\u external\u database\u path
的链接,如果我的操作正确,它的行为与{:action=>“new”,:controller=>“external\u database”}
完全相同
理论上,这应该加载应用程序/外部\u数据库/new,它将呈现\u form.html.erb
。\u form
的第一行是
在使用指向/new的链接时,会出现文章标题中所述的问题。url应用程序/external_databases/new有以下错误:
没有路由匹配{:action=>“show”,:controller=>“external_databases”}
当我使用rails控制台
创建数据成员时,它通过索引和显示正确显示。相同的\u表单
文件由编辑
方法使用,并成功编辑控制台创建的数据成员。还可以销毁功能
…那么为什么它不承认新方法呢
此型号的我的控制器代码:
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
观点:
外部数据库表格
<%= 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 %>
外部数据库
数据库名称
“_blank”%>
“你确定吗?”,:method=>:delete%>
“新建”,控制器=>“外部_数据库”}%>|
new.html.erb
<h1>Creating a new External Database Profile</h1>
<%= render 'form' %>
<%= link_to 'Back', external_database_path %>
<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 %>
<h1>Creating a new External Database Profile</h1>
<%= render 'form' %>
<%= link_to 'Back', external_databases_path %>
创建新的外部数据库配置文件
show.html.erb
<h1>Creating a new External Database Profile</h1>
<%= render 'form' %>
<%= link_to 'Back', external_database_path %>
<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 %>
<h1>Creating a new External Database Profile</h1>
<%= render 'form' %>
<%= link_to 'Back', external_databases_path %>
外部数据库名称
数据库ID
统一资源定位地址
描述
|
|
“你确定吗?”,:method=>:delete%>
您的“返回”链接中的新.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_database_path %>
<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 %>
<h1>Creating a new External Database Profile</h1>
<%= render 'form' %>
<%= link_to 'Back', external_databases_path %>
创建新的外部数据库配置文件
我也有类似的问题。按照这里的指示,运气不好。在提交代码表单的底部,我有“新建”和“删除”按钮。我的“新建”生成了一个错误,因为有一个不可靠的删除按钮:/。无论如何,我至少可以对此进行注释,以使新按钮正常工作,然后集中精力调试删除按钮
= f.submit "Submit", class: "btn btn-large btn-primary"
= link_to 'Create New', new_matrix_header_path, class: 'btn btn-primary'
-#= link_to 'Delete', matrix_header_path(@matrix_header), method: :delete, data: { confirm: 'Are you sure?'}, class: 'btn btn-danger'
我查看了堆栈,发现它在视图的第13行开始出现错误,这是带有删除按钮的行
Started GET "/matrix_headers/new" for 127.0.0.1 at 2014-10-28 21:08:48 +1000
Processing by MatrixHeadersController#new as HTML
User Load (0.2ms) SELECT `users`.* FROM `users` WHERE `users`.`id` = 1 ORDER BY `users`.`id` ASC LIMIT 1
Rendered shared/_error_messages.html.erb (0.4ms)
Rendered matrix_headers/_form.html.haml (21.0ms)
Rendered matrix_headers/new.html.haml within layouts/application (22.6ms)
Completed 500 Internal Server Error in 36ms
ActionController::UrlGenerationError - No route matches {:action=>"show", :controller=>"matrix_headers", :format=>nil, :id=>#<MatrixHeader id: nil>} missing required keys: [:id]:
actionpack (4.1.1) lib/action_dispatch/journey/formatter.rb:39:in `generate'
actionpack (4.1.1) lib/action_dispatch/routing/route_set.rb:597:in `generate'
actionpack (4.1.1) lib/action_dispatch/routing/route_set.rb:627:in `generate'
actionpack (4.1.1) lib/action_dispatch/routing/route_set.rb:663:in `url_for'
actionpack (4.1.1) lib/action_dispatch/routing/url_for.rb:155:in `url_for'
actionview (4.1.1) lib/action_view/routing_url_for.rb:83:in `url_for'
actionpack (4.1.1) lib/action_dispatch/routing/route_set.rb:228:in `call'
actionpack (4.1.1) lib/action_dispatch/routing/route_set.rb:179:in `call'
actionpack (4.1.1) lib/action_dispatch/routing/route_set.rb:268:in `block (2 levels) in define_url_helper'
() media/jay/DATA/rails_projects/my_app/app/views/matrix_headers/_form.html.haml:13:in `block in _app_views_matrix_headers__form_html_haml__2669648707298145379_8667520'
2014年10月28日21:08:48+1000时127.0.0.1版的开始获取“/matrix_headers/new”
MatrixHeadersController处理#新为HTML
用户加载(0.2ms)从“用户”中选择“用户”。“id”=1“用户”的订单。`id`ASC限制1
呈现的共享/_error_messages.html.erb(0.4ms)
渲染矩阵标题/_form.html.haml(21.0ms)
布局/应用程序中的渲染矩阵_头/new.html.haml(22.6ms)
在36毫秒内完成500个内部服务器错误
ActionController::UrlGenerationError-没有路由匹配{:action=>“show”,:controller=>“matrix_headers”,:format=>nil,:id=>#}缺少必需的键:[:id]:
actionpack(4.1.1)lib/action\u dispatch/journey/formatter.rb:39:in'generate'
actionpack(4.1.1)lib/action_dispatch/routing/route_set.rb:597:in'generate'
actionpack(4.1.1)lib/action\u dispatch/routing/route\u set.rb:627:in'generate'
actionpack(4.1.1)lib/action\u dispatch/routing/route\u set.rb:663:in'url\u for'
actionpack(4.1.1)lib/action\u dispatch/routing/url\u for.rb:155:in'url\u for'
actionview(4.1.1)lib/action\u view/routing\u url\u for.rb:83:in'url\u for'
actionpack(4.1.1)lib/action\u dispatch/routing/route\u set.rb:228:in'call'
actionpack(4.1.1)lib/action\u dispatch/routing/route\u set.rb:179:in'call'
actionpack(4.1.1)lib/action\u dispatch/routing/route\u set.rb:268:define\u url\u helper中的block(2层)中
()media/jay/DATA/rails_projects/my_app/app/views/matrix_headers/_form.html.haml:13:in`block in_app_views_matrix_headers_form_html_haml_2669648707298145379_8667520'
通过注释删除按钮,它现在可以正确地路由到new,而无需转到
No route matches{:action=>“show”
错误。很想知道如果添加new\u external\u databases\u path
(databases是复数形式)这是否有效相反,@johnernaut数据库
对于新的路由不会是复数。请快速检查路由文件并运行rake routes
…只有索引
和创建
操作是复数。我明白了。感谢您的澄清。您上面描述的内容应该有效。您确定没有输入错误吗ewhere或您在问题中遗漏了我们没有看到的内容?external\u database\u path(@external\u database)
应为外部数据库#显示
操作,新建外部数据库#路径
应为外部数据库#新建
操作。请显示您的routes.rb并查看添加的文件。感谢您的帮助。