Rails 3 + activerecord, le meilleur moyen de «mettre à jour en masse» un seul champ pour tous les enregistrements qui répondent à une condition

Dans rails 3, en utilisant activerecord, existe-t-il un moyen de requête unique pour définir le champ : hidden sur TRUE pour tous les enregistrements qui remplissent une condition … par exemple :condition => [ "phonenum = ?", some_phone_number ]

Si une seule requête ne peut pas le faire, quelle est l’approche optimale?

Utilisez update_all avec le second paramètre facultatif pour la condition:

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

Update_all n’autorise pas les conditions dans les rails 3. Vous pouvez utiliser une combinaison de scope et update_all

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

Référence: http://m.onkey.org/active-record-query-interface

Si vous souhaitez déclencher des rappels:

 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 

Alors:

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