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