假设我在名为 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
但是,这可能意味着 Controller 操作中的任务运行时间非常长。
所以,我的问题是,是否有其他更好/更高性能/更完善的方法来触发对一组记录的批量更新,确实触发记录上的回调?
最佳答案
不要使用each/find_each,而是尝试使用update
方法:
models.update(column: value)
这只是以下内容的包装:
models.each{|x| x.update(column: value)}
关于ruby-on-rails - 当您需要触发回调时如何更新所有内容?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6931812/