2013-04-21 105 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