【发布时间】:2011-08-03 19:02:43
【问题描述】:
假设我在一个名为 user_ids 的数组中有 15 个用户 ID。
如果我想把他们所有的名字都改成“Bob”,我可以这样做:
users = User.find(user_ids)
users.update_all( :name => 'Bob' )
不过,这不会触发回调。如果我需要在保存这些记录时触发回调,据我所知,唯一的方法是使用:
users = User.find(user_ids)
users.each do |u|
u.name = 'Bob'
u.save
end
然而,这可能意味着控制器操作中的任务运行时间很长。
所以,我的问题是,是否有任何其他更好/更高性能/更高效的方法来触发对一组记录的批量更新,确实触发记录上的回调?
【问题讨论】:
-
也许您也可以列出有关您的问题的更多详细信息,因为有时此类问题有常见的解决方法
-
嗯,特别是在我正在处理的模型中,我有渐进式验证,我使用 before_save 回调来验证是否存在某些信息,并基于模型设置“状态”字段关于信息是完整还是不完整。
-
这显示了哪些方法调用回调等。davidverhasselt.com/set-attributes-in-activerecord
标签: ruby-on-rails ruby-on-rails-3 activerecord callback update-all