我想按照以下方式执行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") }
答案 0 :(得分:3)
不,没有这样的方法。原因可能是每个解决方案无论如何都必须迭代,因为每个对象的所有回调都必须被调用。 'update_all'存在的原因是为开发人员提供了使用mysql API调用直接批量更新记录(或多或少)的可能性......从某种意义上说,可以精确地绕过任何活动记录功能,如验证和回调。
我希望这对你来说是一个令人满意的答案。