Pregunta Rails 3 + activerecord, la mejor manera de "actualizar en masa" un solo campo para todos los registros que cumplen una condición


En los rieles 3, utilizando activerecord, ¿hay una forma de consulta única para establecer el :oculto campo para CIERTO para todos los registros que cumplen una condición ... digamos, por ejemplo, :condition => [ "phonenum = ?", some_phone_number ]

Si una sola consulta no puede hacerlo, ¿cuál es el enfoque óptimo?


75
2018-02-06 09:20


origen


Respuestas:


Utilizar actualizar todo con el segundo parámetro opcional para la condición:

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

86
2018-02-06 09:23



Update_all no permite condiciones en rieles 3. Puede usar combinación de alcance y update_all

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

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


86
2018-02-06 09:37



Si desea activar devoluciones de llamada:

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

Entonces:

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

4
2018-01-28 00:03