2013-02-14 8 views

Antwort

39

Sie update_all verwenden können, wie folgt:

User.where(:id => user.id).update_all({:field1 => true, :field2 => true}) 

Dies erzeugt die folgende Aktualisierungsanweisung (mysql):

UPDATE users SET field1 = 1, field2 = 1 WHERE users.id = <whatever> 

Rückrufe und Validierungen werden nicht ausgeführt.

+0

Wenn Ihr Ziel ist, den Datensatz zu aktualisieren, ohne Änderung der updated_at Feld ist, wird dies nicht funktionieren. Ansonsten ist es der richtige Weg. –

1

was ist es, wie dies zu tun:

user.attributes = attributes 
user.save(validate: false) 
0

Wenn Sie Geschwindigkeit benötigen, können Sie auch direkt auf AR-Verbindung ausführen ausführen. Ich habe so etwas verwendet, um große Datenmengen zu importieren.

connection = ActiveRecord::Base.connection 
email = connection.quote(email) 
zip = connection.quote(zip) 
connection.execute(%{UPDATE "users" SET "email" = #{email}, "zip" = #{zip} WHERE "users"."id" = #{user.id}}) 

Beachten Sie, dass Validierungen und Rückrufe nicht ausgeführt werden.

Kopiert von https://stackoverflow.com/a/25171127/1520775

1

Sie auf diese Weise tun können:

update_columns(field1: value, filed2: value) 
+2

Dies ist nur verfügbar in activerecord v4.0.2 und höher: http://apidock.com/rails/ActiveRecord/Persistence/update_columns – ckbhodge

+0

Dies aktualisiert nur einzelne Datensätze im Gegensatz zu 'update_all', aber es überspringt die Aktualisierung von' updated_at' und Callbacks – carbonr