2016-08-22 146 views
1

我对rails中的关联有个疑问。 我正在尝试为有主题的帖子创建评论。 所以我击溃文件看起来像这样:Ruby on Rails中的关联4

resources :subjects do 
    resources :post do 
    resources :comments 
    end 
end 

现在我想在后的show.html.erb文件中创建一个表单,以便有人能创建一个注释。 我已经试过这种方式,我在轨导发现:

'的帖子/ show.html.erb'

<%= form_for {[@post, @post.comments.build]} do |f| %> 
//fill in form 
<% end %> 

'posts.controller.rb'

def show 
    @post = Post.find(params[:id]) 
end 

但是这给了我一个错误。如果您需要任何其他代码部件,请随时询问。

错误消息

ActionView::Template::Error (undefined method `post_comments_path' for #<#<Class:0x007f9a4429d5e8>:0x007f9a42c01fc8>): 
8: <strong>Text:</strong> 
9: <%= @post.text %> 
10: </p> 
11: <%= form_for ([@post, @post.comments.build]) do |f| %> 
12:  <p> 
13:  <%= f.label :text %><br> 
14:  <%= f.text_area :text %> 
+0

你能分享你的控制台日志有错误吗? – Navin

+0

添加到我的问题 – bendajo

+0

在哪条线上得到此错误? – Navin

回答

2

这些路径resources :subjects下分组的,所以你的路径将是subjects_post_comments_path,或者如果你喜欢使用多态的路径将是[@subjects, @post, @post.comments.build]

您可以运行rake routes | grep comments查看所有评论路径的路径。

+0

'resources:post'也应该是'resources:posts'或'resource:post'。 – meagar

+1

非常感谢,非常完美 – bendajo

+1

可能有用的建议:您可以始终使用'rake routes'来查看可用路线的列表。他们还显示可用的路径。在该列表中,文本的第一位(如果存在)将显示路径。一般情况下,如果你添加'_path'到最后,你会发现上面Jarred的回答中描述的相关路径。 – jaydel