2010-10-26 152 views
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 %> 

那我在表单中包括。为了简洁起见,我之前没有看到它,因为我认为它不重要。我看到这是一个糟糕的主意。

有没有人知道为什么表单中该行的存在会导致奇怪的路由错误?

+3

奇怪!随着你提供的信息,它应该工作。将路由添加到'config/routes.rb'之后,你重新启动了服务器吗? – Ariejan 2010-10-26 15:14:35

+2

这可能不会帮助您解决问题,但只需知道......您可以使用<%form_for [@brand,:responsibility]来避免隐藏字段传递品牌ID。这也会在表单中生成/ brands /:id/responsibilities动作。除此之外,对于您的问题的唯一解释是,优先级较高(路由列表较低)的路线会覆盖您粘贴的路线。 – jenjenut233 2010-10-26 16:58:19

+0

是的,我已经重新启动,一切。我将这个表单重新配置为你的例子Jen,而我在Bates的Controller in Rails 3 screencast中也看到了这一点。仍然是同样的事情。我的路线是: 资源:品牌做 资源:责任 结束 没有什么一般是高于或低于它在routes.rb中。 – AKWF 2010-10-26 17:50:49

回答

1

看起来好像我是个白痴。

离开这一关键性的信息是一个坏主意。在表单中有一个button_to是一个no-no,它会在表单内创建一个表单。

新人的错误。太糟糕了,我一直在做这个很长一段时间。赞扬评论者,抱歉浪费你宝贵的时间。