I’m having a devil of a time getting this particular nested route to work. It’s odd, because I’ve been migrating a number of routes to the new Rails 3 syntax and this one in particular just doesn’t seem to work. Here goes.
I’ve got an object called “piece” which has a nested object called “piece_comment”. Here’s what the routes.rb looks like:
resources :piece do
resources :piece_rating, :as => :rating
resources :piece_comments, :as => :comments
end
And here is what piece/show.html.erb looks like, with a form to submit a piece comment:
<% @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 %>
Now, what’s weird is that I get the following error triggered by the “form_for” line:
undefined method `piece_piece_comments_path' for #<#<Class:0x007f80ec732a48>:0x007f80ec737ae8>
Shouldn’t the :as in my routes file be sending it to piece_comments_path, and not piece_piece_comments_path? if I change it to :as => :foobar or something, I get the same error. So clearly the routes file would not seem to be working correctly. (Oddly, the behavior of the rating route seems fine.)
Any ideas for what might be wrong with the routing?
Altough I’m not sure it is the problem, resources should be plural in the
routes.rb. Try with:Use
rake routesto see the name of the routes generated by theroutes.rb.