在我的评论控制器中,我有以下
class CommentsController< ApplicationController中
def create
@comment_hash = params[:comment]
#@comment = comment.new(comment_params)
@obj = @comment_hash[:commentable_type].constantize.find(@comment_hash[:commentable_id])
@comment = Comment.build_from(@obj, current_user.id, @comment_hash[:body])
binding.pry
#...
在binding.pry
的位置,
@comments_hash是
{"body=>"asdf comment body",
"commentable_type"=>"Hack",
"commentable_id"=>"2"}
@obj是
#<Hack id: 2, created_at: "2014-09-16 00:00:00",
updated_at: "2014-09-16 00:00:00",
body: "some text",
user_id: 1,
comment_threads_count: 0>
但@comment输出
#<Comment id: nil,
commentable_id: 2,
commentable_type: "Hack",
title: nil, body: "asdf,
comment body",
subject: nil,
user_id: 1,
parent_id: nil,
lfg: nil, rgt:
nil, created_at: nil,
updated_at: nil>
为什么这么多东西都没有? build_from
方法的所有参数都与以前相同,当代码正常工作时。
尝试呼叫@comment.save
时的终端输出是
undefined method 'user' for #<Comment:0x5d1b1b0>
我不确定这意味着什么。我有一个user_id关联。我在params哈希中看不到用户参数。
非常感谢任何帮助。
答案 0 :(得分:0)
@Substantial你的怀疑是正确的。
即使我通过acts_as_commentable_with_threading方法设置关联,我仍然需要在用户和评论之间建立has_many
belongs_to
关联。一旦我添加了has_many
belongs_to
关系,事情就会成功。 (当我再次移除它时,它停止工作)。
在用户模型中使用acts_as_commentable_with_threading
用于在用户上发布评论,而不是指定评论属于用户。因此,如果您想对用户发表评论,则需要使用该方法,并且has_many :comments
&amp;评论模型中的belongs_to :user
如果您只想对其他模型发表评论,请将该方法放入该模型中,并将has_many :comments
放入用户模型中,并在评论模型中放置belongs_to :user