微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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调用批量更新记录(或多或少)的可能性……从某种意义上说,可以精确地绕过任何活动记录功能,如验证和回调.

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐