2013-08-17 7 views
13

Gibt es einen kürzeren Weg in Rails 3?Verwendung von update_columns in Rails 3?

user.update_column(:attribute1, value1) 
user.update_column(:attribute2, value2) 
user.update_column(:attribute3, value3) 
user.update_column(:attribute4, value4) 

versuchte ich update_columns aber es ist in Rails 4.

Vielen Dank für jede Hilfe zur Verfügung.

+3

Um klar zu sein, diese Frage erwähnt nicht, ob Rückrufe erforderlich sind oder nicht. Klarstellung ist nötig, bis dann ist sicher anzunehmen, dass Rückrufe unerwünscht sind. –

+0

Sie haben eine Frage gestellt, die nicht ohne Klarstellung beantwortet werden kann. Dann hast du nicht geklärt, wenn du nach Rückrufen gefragt wurdest. Nicht versuchen, unhöflich zu klingen, aber bitte verstehen Sie, wenn Leute versuchen zu helfen, sollten Sie nachverfolgen. – drhenner

Antwort

28

Hier ist eine Abhilfe für Rails 3.x:

User.where(id: user.id).update_all(attribute1: value1, attribute2: value2, ...) 
0

Wenn Sie Geschwindigkeit benötigen, rufen Sie können auch direkt auf AR-Verbindung auszufü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.

0

ein weiterer Ansatz, die Sie ergreifen können, die die gleiche Sache vollbringt, ist dies:

user.assign_attributes(
    first_name: 'foo', 
    last_name: 'bar' 
) 

user.save(validate: false) 

Hinweis: Sie müssen nicht falsch die Validate verwenden. Die # update_column-Methode überspringt jedoch Validierungen und Rückrufe. Wenn Sie das suchen, verwenden Sie validate false.