2013-04-21 99 views
3

我在我的Rails应用程序的我Answer.rb模型下面的代码。在用户发布了问题答案后,他们会被添加到列表中,以便在答案中发布评论时通知他们。将用户添加到answers_watchers表从comment.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模式,我加入这个代码,将用户传递给方法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:comments

+1

@fmendez我想'add_to_watchers'必须是一个实例方法,因为它指的是'watchers'实例方法。 – Steve 2013-04-21 20:01:21

+0

@Steve啊好点:) – fmendez 2013-04-21 20:32:55

回答

2

正如我认为你的工作你打电话add_to_watchersAnswer类而不是相关的Answer实例,该方法没有实现由Class类。所以这就是为什么你得到的错误。

我猜你有一个协会从评论到答复如:

belongs_to :answer 

在你可以参考相关的答案实例与answer这种情况下,这样试试:

def creator_watches_me 
    answer.add_to_watchers(user) 
end 
+0

我没有意识到,如果关联被定义,我可以从评论模型中调用'答案'。谢谢 – 2013-04-21 20:34:34

+0

是的,像'has_many'和'belongs_to'这样的Active Record关联助手会生成像'comments','answer'和'answer ='这样的方法。 – Steve 2013-04-21 20:46:03