我的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
这(与未显示的代码一起)用于通知回答问题的用户是否发布了评论。但是,如果同一个用户在回复中发布评论,我希望在回答者或其他任何人添加评论时通知原始评论者。因此,我想添加对此相同列表的答案进行评论的任何人 - 但显然应为每个答案实例保留单独的列表。这是我遇到麻烦的地方。
我假设它(新的评论者)必须被添加到答案实例而不是课程,虽然我不完全确定如何做到这一点。下面的代码都破了。我只想尝试如何在没有成功的情况下发挥作用。
在我的comment.rb模型中,我添加了这个代码,用于将用户传递给Answer模型中的方法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:评论。
答案 0 :(得分:2)
正如我认为您解决了问题,您在add_to_watchers
类而不是相关的Answer实例上调用了Answer
,并且该方法未由Class
类实现。这就是为什么你得到错误。
我猜你有一个从评论到答案的关联,如:
belongs_to :answer
在这种情况下,您可以使用answer
引用相关的答案实例,请尝试:
def creator_watches_me
answer.add_to_watchers(user)
end