2013-08-17 9 views
13

C'è un modo più breve per questo in Rails 3?Uso di 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) 

ho cercato update_columns ma è disponibile solo in Rails 4.

Grazie per qualsiasi aiuto.

+3

Per essere chiari, questa domanda non menziona se sono necessarie o meno callback. È necessario un chiarimento, fino a quel momento è sicuro assumere che i callback non sono desiderati. –

+0

Hai posto una domanda a cui non è possibile rispondere senza chiarimenti. Quindi non hai chiarito quando ti è stato chiesto sui callback. Non sto cercando di sembrare scortese, ma ti prego di capire quando le persone stanno cercando di aiutare, dovresti dare un seguito. – drhenner

risposta

28

Ecco una soluzione per Rails 3.x:

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

Se avete bisogno di velocità è anche possibile chiamare eseguire direttamente sulla connessione AR. Ho usato qualcosa di simile per importare grandi quantità di dati.

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}}) 

Si noti che le convalide e le richiamate non verranno eseguite.

0

un altro approccio si può prendere, che compie la stessa cosa è questa:

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

user.save(validate: false) 

NOTA: Non è necessario utilizzare il validate falsa. Tuttavia, il metodo #update_column salta convalide e callback. Quindi se questo è quello che stai cercando, usa il validate false.