ruby-on-rails - 当您需要触发回调时如何更新所有内容?

标签 ruby-on-rails ruby-on-rails-3 activerecord callback update-all

假设我在名为 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/

相关文章:

ruby-on-rails - 无法安装旧版本的 gem "rmagick"

ruby-on-rails - Ruby on Rails -- 计数器缓存事务安全吗?

ruby-on-rails - Rails 5.1 中的 skip_before_action 回调和继承

javascript - Ruby on Rails,当用户不接受条款时使用 jQuery 显示警报

ruby-on-rails - Rails 3.2 的隐藏属性未填充表单中的字段

ruby-on-rails - 如何在控制台中按字母顺序显示 Rails ActiveRecord 字段

ruby-on-rails - Rails 4.0.1 和 HAML 中的 `undefined method ` [] ' for nil:NilClass`

ruby-on-rails - Ruby on Rails Windows 开发现在被认为是安全的吗?

sql - 对同一张表的不同条件的多个相关子查询

ruby-on-rails - 何时在 Rails 中使用 "has_many :through"关系?