Rails 3 + activerecord, лучший способ "массового обновления" одного поля для всех записей, удовлетворяющих условию
в rails 3, используя activerecord, есть ли способ с одним запросом установить :скрытый поле в правда для всех записей, удовлетворяющих условию ... скажем, например,:condition => [ "phonenum = ?", some_phone_number ]
Если один запрос не может этого сделать, каков оптимальный подход?
3 ответа:
использовать update_all, а С необязательным вторым параметром для условия:
Model.update_all({ hidden: true }, { phonenum: some_phone_number})
update_all не разрешает условия в rails 3. Вы можете использовать комбинацию scope и update_all
Model.where(phonenum: some_phone_number).update_all(hidden: true)
Если вы хотите, чтобы вызвать обратные вызовы:
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)