是否有等效的ActiveRecord :: Relation.update_all触发回调/观察者?

时间:2011-10-14 05:08:03

标签: ruby-on-rails-3 activerecord observer-pattern

我想按照以下方式执行ActiveRecord模型的批量更新:

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") }

1 个答案:

答案 0 :(得分:3)

不,没有这样的方法。原因可能是每个解决方案无论如何都必须迭代,因为每个对象的所有回调都必须被调用。 'update_all'存在的原因是为开发人员提供了使用mysql API调用直接批量更新记录(或多或少)的可能性......从某种意义上说,可以精确地绕过任何活动记录功能,如验证和回调。

我希望这对你来说是一个令人满意的答案。