3

我的 Rails 应用程序的 Answer.rb 模型中有以下代码。用户发布答案(对问题)后,他们会被添加到列表中,以便在对答案发布评论时收到通知。

答案.rb

 has_and_belongs_to_many :watchers, :join_table => "answer_watchers", :class_name => "User"

after_create :creator_watches_me
  private 

  def creator_watches_me
    self.watchers << user
  end 

这(连同未显示的代码)用于在发布评论时通知回答问题的用户。但是,如果同一用户发表评论作为回复,我希望在回复者或其他任何人添加评论时通知原始评论者。因此,我想添加任何对同一列表的答案发表评论的人——但显然应该为每个答案实例保留单独的列表。这就是我遇到麻烦的地方。

我假设它(新评论者)必须添加到答案实例而不是类中,尽管我不完全确定如何做到这一点。下面的代码都坏了。我只是想玩弄它如何在没有成功的情况下工作。

在我的 comment.rb 模型中,我添加了这段代码,它将用户传递给 Answer 模型中的方法 add_to_watchers

评论.rb

 after_create :creator_watches_me
      private 

  def creator_watches_me
    Answer.add_to_watchers(user)
  end 

在 Answer.rb 模型中,我有这个

  def add_to_watchers(user)
    self.watchers << user
  end 

但现在我根本无法添加评论。我收到这个错误

undefined method `add_to_watchers' for #<Class:0x007faead33f7f8>

我猜我可能遇到的一个问题是我不知道如何从评论模型中引用 Answer 的实例以及如何将该实例传递给 Answer.rb 以便它知道应该将用户添加到哪个答案. 当然,这可能是完全错误的 :( 我已经阅读了一些关于实例和类方法的博客文章,但我无法在我的代码中对其进行整理,如果这甚至是我遇到的问题的话。

所以你知道,答案和评论之间存在关联。Answer.rb has_many:评论。

4

1 回答 1

2

正如我认为您所计算的那样,您调用add_to_watchers的是Answer类而不是相关的 Answer 实例,并且该类未实现该方法Class。所以这就是你得到错误的原因。

我猜你有一个从评论到答案的关联,比如:

belongs_to :answer

在这种情况下,您可以参考相关的 Answer 实例,answer因此请尝试:

def creator_watches_me
  answer.add_to_watchers(user)
end 
于 2013-04-21T19:57:47.260 回答