2013-08-17 3 views
13

क्या रेल 3 में इसके लिए कोई छोटा रास्ता है?रेल 3 में update_columns का उपयोग कर?

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

मैं update_columns की कोशिश की लेकिन यह केवल रेल में 4.

किसी भी मदद के लिए धन्यवाद उपलब्ध है।

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

स्पष्ट होने के लिए, इस प्रश्न में गीलेर का उल्लेख नहीं है या कॉलबैक की आवश्यकता नहीं है। स्पष्टीकरण की आवश्यकता है, तब तक कॉलबैक मानना ​​सुरक्षित नहीं है। –

+0

आपने एक प्रश्न पूछा है जिसे स्पष्टीकरण के बिना उत्तर नहीं दिया जा सकता है। तब कॉलबैक के बारे में पूछे जाने पर आपने स्पष्टीकरण नहीं दिया। कठोर लगने की कोशिश नहीं कर रहा है लेकिन कृपया समझें कि लोग मदद करने की कोशिश कर रहे हैं, तो आपको इसका पालन करना चाहिए। – drhenner

उत्तर

28

यहाँ रेल 3.x के लिए एक समाधान है। मैंने बड़ी मात्रा में डेटा आयात करने के लिए ऐसा कुछ इस्तेमाल किया।

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

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

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

user.save(validate: false) 

नोट::

0

आप गति की जरूरत है आप भी एआर कनेक्शन पर सीधे अमल कॉल कर सकते हैं:

0

एक और दृष्टिकोण ले जा सकते हैं जो एक ही बात सिद्ध यह है जिन्हें आप सत्यापित झूठी उपयोग करने के लिए नहीं है। हालांकि, #update_column विधि सत्यापन और कॉलबैक छोड़ देता है। तो यदि आप यही चाहते हैं, तो मान्य झूठी का उपयोग करें।

संबंधित मुद्दे