Rails form_for с вложенными ресурсами: «Нет совпадений маршрутов» - PullRequest
0 голосов
/ 09 ноября 2011

В моем файле 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 => "show",: controller => "batches_tags"}

Но когда я запускаю $ rake routes, он ясно показывает, что этот маршрут существует :

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

Кто-нибудь знает, как исправить эту ошибку?

Edit:

В представлении для Batches#show я использую ту же самую функцию batch_tag_path, и она отлично работает:

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

1 Ответ

0 голосов
/ 09 ноября 2011

Оказывается, что, хотя batch_tag_path является действительным маршрутом (что делает сообщение об ошибке «Нет совпадений маршрутов» очень запутанным), мне понадобился путь с множественным числом 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"}

Возможно, сообщение об ошибке означало, что batch_tag_path не был допустимым маршрутом для POST?

...