嵌套资源和构建关联的方法

时间:2013-06-05 10:11:16

标签: ruby-on-rails ruby-on-rails-3 activerecord

我有三个模型关联:用户,发布,评论。注释是Post的嵌套资源。

的routes.rb

resources :posts do
 resources :comments
end

用户模型:

has_many :comments

发布模型:

has_many :comments

评论模型:

belonsg_to :user
belonsg_to :post

目标是当用户发表新评论时,它会创建与该用户的关联。所以你可以看到它像用户知道他所做的所有评论。

comments_controller.rb

def create
  @post = Post.find(params[post_id]
  @comment = @post.comments.build[:comment]
  current_user.comments >> @comment
  ....
end

new.html.erb

<% form_for [@post, @post.comment.build]  do |f| %>
.....
<% end %>

这给了我一个错误没有方法评论。我该怎么做才能避免这种情况?

3 个答案:

答案 0 :(得分:1)

很可能你在new.html.erb中缺少“S”字母。应该是评论:

<% form_for [@post, @post.comments.build]  do |f| %>
  .....
<% end %>

如果有更多的逻辑背后你没有发布让我们知道。你的创建动作看起来很好。尝试查看控制台student_id属性,如果它填充了ID而不是你的.cheers。

答案 1 :(得分:0)

使用

@post.comments.build

而不是

@post.comment.build (x)

这应该可行,如果可能的话,将这行代码从视图移动到控制器

了解更多信息 http://guides.rubyonrails.org/association_basics.html#detailed-association-reference

答案 2 :(得分:0)

new.html.erb 文件中,您使用“s”作为构建方法。

应该是,

<% form_for [@post, @post.comments.build]  do |f| %>
.....
<% end %>