Rails 3 + activerecord, лучший способ «массового обновления» одного поля для всех записей, соответствующих условию - PullRequest
76 голосов
/ 06 февраля 2011

В рельсах 3, используя activerecord, есть ли способ с одним запросом установить для поля : hidden значение TRUE для всех записей, которые соответствуют условию ... скажемНапример, :condition => [ "phonenum = ?", some_phone_number ]

Если один запрос не может это сделать, каков оптимальный подход?

Ответы [ 3 ]

87 голосов
/ 06 февраля 2011

Используйте update_all с необязательным вторым параметром для условия:

Model.update_all({ hidden: true }, { phonenum: some_phone_number})
86 голосов
/ 06 февраля 2011

update_all не разрешает условия в рельсах 3. Вы можете использовать комбинацию scope и update_all

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

Ссылка: http://m.onkey.org/active-record-query-interface

5 голосов
/ 28 января 2017

Если вы хотите вызвать обратные вызовы:

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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...