I am working through the official Getting Started with Rails tutorial http://guides.rubyonrails.org/getting_started.html#generating%20-a-controller I am stuck on section 8.4 Generating a Controller. It suggests there that this definition: def index @post = Post.find(params[:post_id]) @comments = @post.comments end S ould be used in com ents_controller.rb. Surely that would make http://localhost:3000/comments work, but it gives the error Couldn''t find Post without an ID. That suggests a problem with the first line of the definition. However that is what it says I should use in the tutorial so I looked at post.rb and comment.rb and they are as directed. Also checked routes.rb but all seems to be correct. Incidentally the page http://localhost:3000/posts/1 works fine and displays comments which I have to enter with the terminal as http://localhost:3000/comments/new gives the same error. I have been tearing my hair out with this for 3 days. Can somebody please point out what I am doing wrong. Attachments: http://www.ruby-forum.com/attachment/4577/index.html.erb -- Posted via http://www.ruby-forum.com/. -- You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en.
Neil Bye wrote:> I am working through the official Getting Started with Rails tutorial > http://guides.rubyonrails.org/getting_started.html#generating%20-a-controller > > I am stuck on section 8.4 Generating a Controller. It suggests there > that this definition: > def index > @post = Post.find(params[:post_id]) > @comments = @post.comments > end > > S ould be used in com ents_controller.rb. Surely that would make > http://localhost:3000/comments work, but it gives the error > Couldn''t find Post without an ID. That suggests a problem with the first > line of the definition. However that is what it says I should use in the > tutorial so I looked at post.rb and comment.rb and they are as directed. > Also checked routes.rb but all seems to be correct. Incidentally the > page http://localhost:3000/posts/1 > works fine and displays comments which I have to enter with the terminal > as http://localhost:3000/comments/new gives the same error.Take a closer look at this URL: http://localhost:3000/comments How would the comments_controller know which post to look up. The resource identifier is not anywhere in the URL and it''s not tacked on as a query parameter. The most likely design in this case would be to nest comments under posts. The URL would look something like: http://localhost:3000/posts/1/comments/new And the new action would look something like: def new @post = Post.find(params[:post_id]) @comment = @post.comments.build end If course you''re going to want to DRY up this code by moving: @post = Post.find(params[:post_id]) Into a private method and adding a before_filter to load the post. -- Posted via http://www.ruby-forum.com/. -- You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en.