2011-02-06 16 views

Respuesta

84

Uso update_all con el segundo parámetro opcional para la condición:

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

Qué pasa con el caso en el que un valor es menor que un cierto valor para la ex update_all ({: hidden => true}, {: DATE_CREATED ctilley79

+7

@ ctilley79, creo que esto debería funcionar: 'Model.where (" date_create Dogbert

+0

Nota: esto no actualizará un 'counter_cache'. Ten cuidado. – sscirrus

84

El update_all no permite que las condiciones en los carriles 3. Se puede utilizar 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

+4

** Esto está mal **. La página dice "** suministro de cualquier opción **", según el párrafo que se encuentra justo encima de la lista de métodos que describe las distintas opciones que pueden ir en el hash 'options'. Esto no incluye el argumento 'conditions' en' update_all() '. – Ashe

+0

Estoy de acuerdo que está equivocado. de acuerdo con la API Avatar.update_all ['migrated_at =?', Time.now.utc], ['migrated_at>?', 1.week.ago] configurará migrated = now donde migrated_at está dentro de una semana. – ctilley79

+4

Según la documentación de los rieles 4, el método sugerido anteriormente es, de hecho, el camino a seguir - http://apidock.com/rails/ActiveRecord/Relation/update_all - # Actualizar todos los libros con 'Rails' en su título Book.where ('título LIKE?', '% Rails%'). update_all (autor: 'David') –

4

Si desea desencadenar 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 

continuación:

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