2010-12-15 17 views
14

Supongamos que tengo una tabla llamada 'user_products' y un modelo correspondiente llamado UserProduct en mi aplicación Rails. También tengo un campo llamado 'is_temporary' en mi tabla. Ahora supongamos que quiero ejecutar una consulta como esta pero usando la capa de abstracción de ActiveRecord:¿Actualizar múltiples registros simultáneamente con ActiveRecord en Rails usando una consulta?

UPDATE user_products SET is_temporary = false WHERE user_id = 12345; 

¿Hay alguna manera de hacer esto utilizando ActiveRecord? Tal vez algo en la línea de

UserProduct.find_by_user_id(12345).update_attributes(:is_temporary => false) 

Me gustaría que solo se ejecutara una consulta para que esto suceda.

Respuesta

16
UserProduct.update_all({:is_temporary => false}, {:user_id => 12345}) 
18
UserProduct.update_all({:is_temporary => false}, {:user_id => 12345}) 

aunque cuidado: esto se salta todas las validaciones y devoluciones de llamada, ya que alguna vez se instanciado ningún caso de UserProduct.

19

Esta es una publicación anterior. He actualizado esto en caso de que alguien lo comprueba :) (carriles 4)

DEPRECATION: Relation#update_all with conditions is deprecated. Please use Item.where(color: 'red').update_all(...) rather than Item.update_all(..., color: 'red'). 

lo que la consulta será

UserProduct.where(:user_id => 12345).update_all(:is_temporary => false) 

Saludos

+1

muy apreciada, gracias! – Sebastialonso

+0

Esto parece funcionar también en Rails 3 – lavaturtle

Cuestiones relacionadas