ruby-on-rails-3 – 是否有等效的ActiveRecord :: Relation.update_all触发回调/观察者?

我想执行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") }

解决方法

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

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

相关文章

validates:conclusion,:presence=>true,:inclusion=>{...
一、redis集群搭建redis3.0以前,提供了Sentinel工具来监控各...
分享一下我老师大神的人工智能教程。零基础!通俗易懂!风趣...
上一篇博文 ruby传参之引用类型 里边定义了一个方法名 mo...
一编程与编程语言 什么是编程语言? 能够被计算机所识别的表...
Ruby类和对象Ruby是一种完美的面向对象编程语言。面向对象编...