2010-09-20 70 views
1

假設我必須簡單型號FirstSecond,並且存在一對一的關係從Second使用belongs_to :first。現在我想用Second做點什麼,當保存First。但我不想在First中設置after_save回調,來處理SecondActiveRecord從不同型號回撥設置

我想讓我的模特保持清潔,儘可能不讓對方感覺到。我總是遵循對象封裝的最佳實踐,並且總是讓我的生活更輕鬆。

所以很自然的,因爲after_save是一個類的方法,我試圖建立這種回調在Second,像這樣:

class Second < ActiveRecord::Base 

    belongs_to :first 

    First.after_save do |record| 
    if that = Second.find_by_first_id(record.id) 
     # grow magic mushrooms here... 
    end 
    end 
end 

但這不起作用,永遠不會執行該回調,並沒有錯誤上調。

回答

3

最好設置一個observer,像「FirstObserver」,並在那裏寫一個保存後回調。

+0

事實上,觀察者解決我的問題,我不知道他們的存在,謝謝。 – skrat 2010-09-20 13:22:41

4

您可以通過觀測做到這一點:

class FirstObserver < ActiveRecord::Observer 
    def after_save(first) 
    ... 
    end 
end 

不要忘了讓觀察者在config/application.rb

config.active_record.observers = :first_observer 
0

試試這個:

First.class_eval do 
    def after_save record 
    #mashrooooms 
    end 
end