Сломанные вложенные маршруты: Rails 3 - PullRequest
0 голосов
/ 06 февраля 2012

У меня дьявольское время, чтобы заставить этот конкретный вложенный маршрут работать. Это странно, потому что я перенес несколько маршрутов в новый синтаксис Rails 3, а этот, в частности, просто не работает. Здесь идет.

У меня есть объект с именем "piece", который имеет вложенный объект с именем "piece_comment". Вот как выглядит route.rb:

resources :piece do
  resources :piece_rating, :as => :rating
  resources :piece_comments, :as => :comments
end

А вот как выглядит кусок / show.html.erb с формой для отправки комментария к фрагменту:

<% @piece_comment = PieceComment.new(:piece_id => @piece.id, :user_id => current_user.id) %>

<%= form_for [@piece, @piece_comment] do |f| %>
  <%= f.hidden_field 'piece_comment', 'user_id' %>
  <%= f.hidden_field 'piece_comment', 'piece_id' %>
  <%= f.text_area 'piece_comment', 'comment' %>
  <%= f.submit_tag 'Post' %>
<% end %>

Теперь, что странно, я получаю следующую ошибку, вызванную строкой "form_for":

undefined method `piece_piece_comments_path' for #<#<Class:0x007f80ec732a48>:0x007f80ec737ae8>

Разве :as в моем файле маршрутов не должен отправлять его в piece_comments_path, а не piece_piece_comments_path? если я изменяю его на :as => :foobar или что-то подобное, я получаю ту же ошибку. Очевидно, что файл маршрутов не будет работать правильно. (Как ни странно, поведение рейтингового маршрута кажется нормальным.)

Есть идеи, что может быть не так с маршрутизацией?

1 Ответ

1 голос
/ 06 февраля 2012

Хотя я не уверен, что это проблема, ресурсы должны быть множественными в routes.rb. Попробуйте с:

resources :pieces do
  resources :piece_ratings, :as => :ratings
  resources :piece_comments, :as => :comments
end

Используйте rake routes, чтобы увидеть названия маршрутов, сгенерированных routes.rb.

...