2011-10-14 109 views
4

我想執行的ActiveRecord模型的批量更新,沿着線:是否有觸發回調/觀察者的ActiveRecord :: Relation.update_all等價物?

MyModel.where(:field1=>"value1").update_all(:field1=>"value2") 

我已經有了爲MyModel,我需要在此更新觸發一個觀察者,我沒有看到發生。此行爲與文檔一致。

http://apidock.com/rails/ActiveRecord/Relation/update_all

是否有一個「內置」或「最佳實踐」的方式做批量更新和觸發觀察員,比遍歷其它(如):

MyModel.where(:field1=>"value1").each{ |m| m.update_attributes(:field1=>"value2") } 

回答

3

不存在沒有這樣的方式。原因可能是每個解決方案都必須以某種方式迭代,因爲每個對象上的所有回調都必須被調用。 'update_all'存在的原因是爲了讓開發人員能夠直接使用mysql API調用來批量更新記錄(或多或少)......從某種意義上來說,它可以精確地控制任何activerecord功能,如驗證和回調。

我希望這是一個令人滿意的答案。

相關問題