2013-12-23 32 views
0

在Rails中實現模型A創建時,模型B可以觀察並更改的最佳方式是什麼?在Rails中對模型事件的獨立觀察

一種解決方案是某種過濾器,例如模型A中的after_create。但是,在模型A中使用某些模型B代碼似乎是一種不好的做法。

另一種解決方案是在模型B的控制器中有一些代碼來處理這個問題,這似乎也是一個壞主意。

理想情況下,模型B或某種獨立的觀察者類應該能夠觀察到所有模型A的創建,然後根據需要進行操作。

回答

1

更新:

由於OP的指出,這是爲Rails4因爲這個問題原本標記,我已經錯過了注意。 Rails 4 alternative to Observers question這裏在SO有幾個很好的答案。

原來的答案:

這可以通過使用Observer來完成。假設您想要一個ModelAObserver,您可以在其中定義ModelB所需的操作,則可以手動創建一個新文件app/models/model_a_observer.rb或使用生成器rails g observer ModelA

然後在ModelAObserver定義所需的回調:

# app/models/model_a_observer.rb 
class ModelAObserver < ActiveRecord::Observer 
    observe :model_a 

    def after_create(new_model_a_record) 
    ... 
    # Operations on ModelB 
    ... 
    end 
end 
+0

謝謝你幫助我。我正在使用rails 4,其中觀察員已被棄用,但您的答案讓我這樣:http://stackoverflow.com/questions/15165260/rails-observer-alternatives-for-4-0 – TrevTheDev

+0

@ user3091013,謝謝你鏈接。我在這個答案的頂部添加了一條短信,並附上您發佈的鏈接。 – vee