acts_as_commentable_with_threading - “build_from”方法失败了吗?

时间:2014-09-17 01:15:59

标签: ruby-on-rails acts-as-commentable

在我的评论控制器中,我有以下

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哈希中看不到用户参数。

非常感谢任何帮助。

1 个答案:

答案 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