1
昨天我有这个工作,我不知道我做了什么来打破它。Rails 3路由错误
这里是一个RESTful控制器路线:
brand_responsibilities GET /brands/:brand_id/responsibilities(.:format) {:action=>"index", :controller=>"responsibilities"}
brand_responsibilities POST /brands/:brand_id/responsibilities(.:format) {:action=>"create", :controller=>"responsibilities"}
new_brand_responsibility GET /brands/:brand_id/responsibilities/new(.:format) {:action=>"new", :controller=>"responsibilities"}
edit_brand_responsibility GET /brands/:brand_id/responsibilities/:id/edit(.:format) {:action=>"edit", :controller=>"responsibilities"}
brand_responsibility GET /brands/:brand_id/responsibilities/:id(.:format) {:action=>"show", :controller=>"responsibilities"}
brand_responsibility PUT /brands/:brand_id/responsibilities/:id(.:format) {:action=>"update", :controller=>"responsibilities"}
brand_responsibility DELETE /brands/:brand_id/responsibilities/:id(.:format) {:action=>"destroy", :controller=>"responsibilities"}
我的形式如下:
<%= form_for :responsibility, :remote => true do |f| %>
<%= f.hidden_field :access_request_id, :value => ar.id %>
<%= f.hidden_field :user_id, :value => user.id %>
<%= f.hidden_field :brand_id, :value => @brand.id %>
<%= f.submit %>
<% end %>
但我得到一个404现在有了这个日志消息:
Started POST "/brands/30/responsibilities" for 127.0.0.1 at Tue Oct 26 10:47:17 -0400 2010
ActionController::RoutingError (No route matches "/brands/30/responsibilities"):
它确实看起来像路线匹配我!我错过了什么?
更新:我也是在控制台中尝试这样的:
rs.recognize_path '/brands/30/responsibilities', :method => :post
和反应是:
=> {:controller=>"responsibilities", :brand_id=>"30", :action=>"create"}
什么是我的交易?
更新#2:
我找到了原因,但我不知道为什么它的原因做。我有另一个字段:
<%= button_to "Deny", brand_responsibilities_path(@brand, :ar => ar), :remote => true, :method => :delete %>
那我在表单中包括。为了简洁起见,我之前没有看到它,因为我认为它不重要。我看到这是一个糟糕的主意。
有没有人知道为什么表单中该行的存在会导致奇怪的路由错误?
奇怪!随着你提供的信息,它应该工作。将路由添加到'config/routes.rb'之后,你重新启动了服务器吗? – Ariejan 2010-10-26 15:14:35
这可能不会帮助您解决问题,但只需知道......您可以使用<%form_for [@brand,:responsibility]来避免隐藏字段传递品牌ID。这也会在表单中生成/ brands /:id/responsibilities动作。除此之外,对于您的问题的唯一解释是,优先级较高(路由列表较低)的路线会覆盖您粘贴的路线。 – jenjenut233 2010-10-26 16:58:19
是的,我已经重新启动,一切。我将这个表单重新配置为你的例子Jen,而我在Bates的Controller in Rails 3 screencast中也看到了这一点。仍然是同样的事情。我的路线是: 资源:品牌做 资源:责任 结束 没有什么一般是高于或低于它在routes.rb中。 – AKWF 2010-10-26 17:50:49