I'm getting this error:
undefined method `post_comments_path' for #<#<Class:0x1052a6e98>:0x1052a4be8>
Extracted source (around line #27):
24:
25: <% end%>
26:
27: <% form_for [@post, Comment.new] do |f| %>
28: <p>
29:
30: <%= f.label :name, "Author" %><br />
My routes:
Myblog::Application.routes.draw do
root :to => 'posts#index'
resources :comments
resources :posts, :has_many => :comments
post.rb
class Post < ActiveRecord::Base
has_many :comments
end
comment.rb
class Comment < ActiveRecord::Base
belongs_to :post
end
views/posts/show.html.erb
<p id="notice"><%= notice %></p>
<p>
<b>Title:</b>
<%= @post.title %>
</p>
<p>
<b>Body:</b>
<%= @post.body %>
</p>
<h2>Comments</h2>
<% @post.comments.each do |c|%>
<p>
<b><%=h c.name %>said: </b>
<%= time_ago_in_words(c.created_at)%> ago
</p>
<p>
<%= c.body%>
</p>
<% end%>
<% form_for [@post, Comment.new] do |f| %>
<p>
<%= f.label :name, "Author" %><br />
<%= f.text_field :name %><br />
<%= f.label :body, "Comment Description" %><br />
<%= f.text_area :body %>
</p>
<p>
<%= f.submit "Add Comment" %>
</p>
<% end %>
<%= link_to 'Edit', edit_post_path(@post) %> |
<%= link_to 'Back', posts_path %>
Confused as I don't see any reference to post_comments_path??
rake routes:
root /(.:format) {:action=>"index", :controller=>"posts"}
comments GET /comments(.:format) {:action=>"index", :controller=>"comments"}
comments POST /comments(.:format) {:action=>"create", :controller=>"comments"}
new_comment GET /comments/new(.:format) {:action=>"new", :controller=>"comments"}
edit_comment GET /comments/:id/edit(.:format) {:action=>"edit", :controller=>"comments"}
comment GET /comments/:id(.:format) {:action=>"show", :controller=>"comments"}
comment PUT /comments/:id(.:format) {:action=>"update", :controller=>"comments"}
comment DELETE /comments/:id(.:format) {:action=>"destroy", :controller=>"comments"}
posts GET /posts(.:format) {:action=>"index", :controller=>"posts"}
posts POST /posts(.:format) {:action=>"create", :controller=>"posts"}
new_post GET /posts/new(.:format) {:action=>"new", :controller=>"posts"}
edit_post GET /posts/:id/edit(.:format) {:action=>"edit", :controller=>"posts"}
post GET /posts/:id(.:format) {:action=>"show", :controller=>"posts"}
post PUT /posts/:id(.:format) {:action=>"update", :controller=>"posts"}
post DELETE /posts/:id(.:format) {:action=>"destroy", :controller=>"posts"}
You don't have a post_comments_path specified through your routes. You're not supposed to use :has_many
in routes (only models), but nest them instead. This should do the trick:
resources :posts do
resources :comments
end
I think the problem is in your routes.
resources :posts, :has_many => :comments
Check out this blog, they changed routes quite a bit: http://www.engineyard.com/blog/2010/the-lowdown-on-routes-in-rails-3/
In Rails 2, nested resources were defined by a block or by using a :has_many or :has_one key. Both of these have been superseded by a block, giving them a more Rubyish interface to defining associated resources.
Try this:
resources :posts do
resources :comments
end
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With