2013-02-14 39 views
10

बस जिज्ञासा से बाहर, इस कहने का एक तरीका रूबी ऑन रेल्स में एक पंक्ति मेंरेल 3 पर रुबी में एकाधिक कॉलम अपडेट कैसे करें?

user.update_column(:field1, true) 
user.update_column(:field2, true) 

है ... ...?

जहाँ तक मुझे पता के रूप में एक update_columns विधि मौजूद नहीं है ...

उत्तर

39

आप इस प्रकार update_all उपयोग कर सकते हैं:

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

यह निम्न अद्यतन कथन उत्पन्न करेगा (mysql):

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

कॉलबैक और सत्यापन नहीं चलाए जाएंगे।

+0

अपने लक्ष्य updated_at क्षेत्र बदले बिना रिकॉर्ड को अपडेट करने के लिए है, तो यह काम नहीं करेगा। अन्यथा, यह जाने का रास्ता है। –

1

क्या इस तरह यह करने के बारे में:

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

यदि आपको गति की आवश्यकता है तो आप सीधे एआर कनेक्शन पर निष्पादित कर सकते हैं। मैंने बड़ी मात्रा में डेटा आयात करने के लिए ऐसा कुछ इस्तेमाल किया।

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

ध्यान दें कि सत्यापन और कॉलबैक नहीं चलेंगे।

से https://stackoverflow.com/a/25171127/1520775

1

कॉपी किया गया है आप इस तरह से कर सकते हैं:

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

यह केवल activerecord v4.0.2 और उच्चतर में उपलब्ध है: http://apidock.com/rails/ActiveRecord/Persistence/update_columns – ckbhodge

+0

यह केवल 'update_all' के विपरीत एकल रिकॉर्ड अपडेट करता है लेकिन यह' अपडेट_एट 'और कॉलबैक अपडेट करने को छोड़ देता है – carbonr