我收到了这个错误:
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 />
我的路线:
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
视图/帖/ 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 %>
因为我没有看到对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"}
答案 0 :(得分:10)
您没有通过路线指定post_comments_path。您不应该在路由中使用:has_many
(仅限模型),而是将它们嵌套。这应该可以解决问题:
resources :posts do
resources :comments
end
答案 1 :(得分:3)
我认为问题出在你的路线上。
resources :posts, :has_many => :comments
看看这个博客,他们改变了很多路线: http://www.engineyard.com/blog/2010/the-lowdown-on-routes-in-rails-3/
在Rails 2中,嵌套资源是 由块或使用a定义 :has_many或:has_one键。两者的 这些已经被一个街区所取代, 给他们一个更Rubyish的界面 定义相关资源。
试试这个:
resources :posts do
resources :comments
end