我在我的Rails应用程序的Answer.rb模型中有以下代码。在用户发布了答案(对问题)之后,他们会被添加到一个列表中,如果在答案上发布了评论,则会收到通知。
Answer.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 这(连同未显示的代码)用于在发表评论时通知回答问题的用户。然而,如果同一个用户在回复中发布了评论,我希望如果回答者或其他任何人添加了评论,都会通知原始评论者。因此,我想添加对同一列表的答案发表评论的任何人--但显然应该为答案的每个实例保留单独的列表。这就是我遇到麻烦的地方。
我假设它(新的评论者)必须添加到answer实例中,而不是类中,尽管我不完全确定如何做到这一点。下面的代码都被破坏了。我只是在试着玩弄它是如何工作的,但没有成功。
在我的comment.rb模型中,我添加了这段代码,它将把用户传递给答案模型中的add_to_watchers方法
comment.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.rb,以便它知道应该将用户添加到哪个答案。当然,这可能是完全错误的:(我已经阅读了一些关于实例和类方法的博客文章,但我在代码中很难解决它,如果这就是我遇到的问题的话。
所以你知道,答案和评论是有联系的。Answer.rb has_many :评论。
发布于 2013-04-22 03:57:47
正如我所说的,您是在Answer类上调用add_to_watchers,而不是在相关的Answer实例上调用,并且该方法不是由Class类实现的。这就是你得到这个错误的原因。
我猜你有一个从评论到答案的关联,如下所示:
belongs_to :answer在这种情况下,您可以使用answer引用相关的答案实例,因此请尝试:
def creator_watches_me
answer.add_to_watchers(user)
end https://stackoverflow.com/questions/16135477
复制相似问题