Rails 3 + activerecord,为所有符合条件的记录“批量更新”单个字段的最佳方法

时间:2011-02-06 09:20:15

标签: ruby-on-rails activerecord

在rails 3中,使用activerecord,对于符合条件的所有记录,是否有单一查询方式将:隐藏字段设置为 TRUE ...说例如,:condition => [ "phonenum = ?", some_phone_number ]

如果单个查询无法做到,那么最佳方法是什么?

3 个答案:

答案 0 :(得分:87)

使用update_all和条件的可选第二个参数:

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

答案 1 :(得分:86)

update_all不允许rails 3中的条件。您可以使用scope和update_all的组合

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

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

答案 2 :(得分:5)

如果您想触发回调:

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)