Rails 3 + activerrecord,对于满足条件的所有记录来说,“大规模更新”单个字段的最佳方式

在 Rails 3中,使用 activerecord,是否有一种单一的查询方法将满足条件的所有记录的 翻译: hide字段设置为 没错... 例如,:condition => [ "phonenum = ?", some_phone_number ]

如果单个查询不能做到这一点,最佳方法是什么?

47482 次浏览

对条件使用带有可选的第二个参数的 更新:

Model.update_all({ hidden: true }, { phonenum: some_phone_number})

Update _ all 不支持 Rails 3中的条件。您可以使用作用域和 update _ all 的组合

Model.where(phonenum: some_phone_number).update_all(hidden: true)

参考资料: http://m.onkey.org/active-record-query-interface

如果您想触发回调:

class ActiveRecord::Base
def self.update_each(updates)
find_each { |model| model.update(updates) }
end


def self.update_each!(updates)
find_each { |model| model.update!(updates) }
end
end

然后:

Model.where(phonenum: some_phone_number).update_each(hidden: true)