使用嵌套资源的Rails form_for:“没有路由匹配”

时间:2011-11-09 16:40:29

标签: ruby-on-rails-3 routes form-for nested-resources

我的routes.rb文件中有以下嵌套资源。内部资源指定控制器名称。

resources :batches, :except => [:new], :path => "sets" do
  resources :tags, :controller => "batches_tags"
end

BatchesTags#new的视图中,我正在尝试构建表单:

<%= form_for [@batch, @tag], :url => batch_tag_path do |f| %>
  ...
<% end %>

尝试加载此页面(/sets/1/tags/new)会给我一个ActionController :: RoutingError,其中包含以下消息:

  

没有路线匹配{:action =&gt;“show”,:controller =&gt;“batches_tags”}

但是当我运行$ rake routes时,它清楚地显示 存在的路线:

batch_tag GET    /sets/:batch_id/tags/:id(.:format)        {:action=>"show", :controller=>"batches_tags"}

有谁知道如何修复此错误?

修改

Batches#show的视图中,我使用相同的batch_tag_path函数,它完美无缺:

<%= link_to "...", batch_tag_path(@batch, tag) %>

1 个答案:

答案 0 :(得分:0)

事实证明,虽然batch_tag_path 有效路由(使“无路由匹配”错误消息非常混乱),但我需要的路径是复数{{1} },如此batch_tags_path输出中所示:

$ rake routes

也许错误消息意味着batch_tags GET /sets/:batch_id/tags(.:format) {:action=>"index", :controller=>"batches_tags"} POST /sets/:batch_id/tags(.:format) {:action=>"create", :controller=>"batches_tags"} 不是POST的有效路径?