2010-12-15 10 views
14

Nehmen wir an, ich habe eine Tabelle namens 'user_products' und ein entsprechendes Modell namens UserProduct in meiner Rails-Anwendung. Ich habe auch ein Feld namens "is_temporary" in meiner Tabelle. Nehmen wir nun an möchte ich eine Abfrage wie diese aber mit der Activeabstraktionsschicht auszuführen:Mehrere Datensätze gleichzeitig mit ActiveRecord in Rails mit einer Abfrage aktualisieren?

UPDATE user_products SET is_temporary = false WHERE user_id = 12345; 

Gibt es eine Weise, die ich dies mit Active tun kann? Vielleicht etwas in Richtung

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

Ich möchte nur eine Abfrage ausgeführt werden, damit dies geschieht.

Antwort

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

Obwohl Vorsicht: diese alle Validierungen und Rückrufe überspringt, da keine Instanz von UserProduct immer instanziiert werden.

19

Dies ist ein alter Beitrag. Ich dies für den Fall, aktualisiert jemand überprüft es :) (Rails 4)

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

So ist die Abfrage

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

Beifall

+1

sehr geschätzt wird, danke! – Sebastialonso

+0

Dies scheint auch in Rails 3 zu funktionieren – lavaturtle

Verwandte Themen