0
在Rails中實現模型A創建時,模型B可以觀察並更改的最佳方式是什麼?在Rails中對模型事件的獨立觀察
一種解決方案是某種過濾器,例如模型A中的after_create。但是,在模型A中使用某些模型B代碼似乎是一種不好的做法。
另一種解決方案是在模型B的控制器中有一些代碼來處理這個問題,這似乎也是一個壞主意。
理想情況下,模型B或某種獨立的觀察者類應該能夠觀察到所有模型A的創建,然後根據需要進行操作。
在Rails中實現模型A創建時,模型B可以觀察並更改的最佳方式是什麼?在Rails中對模型事件的獨立觀察
一種解決方案是某種過濾器,例如模型A中的after_create。但是,在模型A中使用某些模型B代碼似乎是一種不好的做法。
另一種解決方案是在模型B的控制器中有一些代碼來處理這個問題,這似乎也是一個壞主意。
理想情況下,模型B或某種獨立的觀察者類應該能夠觀察到所有模型A的創建,然後根據需要進行操作。
更新:
由於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
謝謝你幫助我。我正在使用rails 4,其中觀察員已被棄用,但您的答案讓我這樣:http://stackoverflow.com/questions/15165260/rails-observer-alternatives-for-4-0 – TrevTheDev
@ user3091013,謝謝你鏈接。我在這個答案的頂部添加了一條短信,並附上您發佈的鏈接。 – vee