2013-08-17 14 views
13

Rails 3 bu için daha kısa bir yol var mı? kullanma update_columns?

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

Ben update_columns çalıştı ancak yalnızca Rails herhangi bir yardım için 4.

sayesinde mevcuttur. Eğer hız gerekiyorsa

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

, Açık olmak gerekirse bu soru geri aramaları gerekmektedir Hava veya olmasın söz etmez. Açıklamaya gerek yok, o zamana kadar geri aranmaların istenmediğini varsaymak güvenli. –

+0

Sen açıklama olmadan yanıtlanamaz bir soru sordu. Ardından geri aramalar sorulduğunda netleştirmediniz. Kaba ses çıkarmaya çalışmayın ama lütfen insanlar yardım etmeye çalışırken anlayın. – drhenner

cevap

28

İşte Raylar 3.x için bir çözüm var. Büyük miktarda veri almak için böyle bir şey kullandım. doğrulamalar ve geri aramalar çalıştırmak olmayacak

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

Not.

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

user.save(validate: false) 

NOT:

0

ayrıca AR bağlantısı doğrudan yürütmek çağırabilirsiniz:

0

Eğer aynı işlevi görecektir hangi alabilir başka yaklaşım şudur Yanlış validate kullanmak zorunda değilsiniz. Ancak, #update_column yöntemi, doğrulama ve geri çağrıları atlar. Yani, aradığınız şey buysa, false doğrulamasını kullanın.