2011-02-16 3 views
5

इस कोडअगर update_all वास्तव में रेल

def create 
    @upgrades = User.update_all(["role = ?","upgraded"], :id => params[:upgrade]) 
    redirect_to admin_upgrades_path, :notice => "Successfully upgraded user."  
end 

कैसे मैं वास्तव में है कि कार्रवाई में पुष्टि कर सकते हैं अगर वे बचा लिया गया था या उचित पेज और संदेश को पुन: निर्देशित नहीं देखते हुए में अद्यतन किया गया था कैसे लगाएं कि?

उत्तर

7

रेल 3 में, update_all अद्यतन किए गए रिकॉर्ड्स की संख्या को छोड़कर किसी भी सार्थक जानकारी को वापस नहीं करता है (यह इस बात पर निर्भर हो सकता है कि आपका डीबीएमएस उस जानकारी को लौटाता है)।

http://ar.rubyonrails.org/classes/ActiveRecord/Base.html#M000343

यह किसी भी वस्तुओं का दृष्टांत नहीं करता है, आप लॉग को देखकर यह सत्यापित कर सकते हैं।

अगर मैं 4 और 5 मेरी डेटाबेस (और दूसरा कोई) में की यूजर आईडी है, यहाँ मैं क्या मिलेगा:

irb(main):007:0> u = User.update_all("id = id", :id => 5) 
=> 1 
irb(main):008:0> u = User.update_all("id = id", :id => 55) 
=> 0 
irb(main):009:0> u = User.update_all("id = id", :id => [4,5]) 
=> 2 
irb(main):010:0> u = User.update_all("id = id", :id => [4,53]) 
=> 1 
irb(main):011:0> u.class 
=> Fixnum 

आप रिकॉर्ड को संशोधित किया गया प्राप्त करना चाहते हैं, तो आप का उपयोग करने के " अपडेट करें ", आईडी मानों की एक सूची में पास करें, और फिर आपको तत्काल ऑब्जेक्ट प्राप्त होंगे।

ध्यान दें कि यदि आपके पास बहुत सी आईडी हैं तो आप बहुत से ऑब्जेक्ट्स को तुरंत चालू करके अपने सर्वर की मेमोरी को आसानी से खत्म कर सकते हैं।

दूसरी तरफ मैं सोच सकता हूं, पहले उन वस्तुओं की एक क्वेरी करना होगा जिन्हें अपग्रेड किया जाएगा (ऑब्जेक्ट ग्रुपिंग का उपयोग करें और केवल उस तालिका से विशेषताओं का चयन करें जिन्हें आपको प्रदर्शित करने की आवश्यकता है, इस प्रकार स्मृति को सहेजना), उत्पन्न करना अपनी रिपोर्ट, फिर Update_All क्वेरी चलाएं ...

+0

क्या आप एक उदाहरण प्रदान कर सकते हैं? – Martin

+0

लौटने के लिए एक और तरीका एसक्यूएल कोड स्वयं लिखना और वापसी * ​​रखना है। कॉल प्रत्येक रिकॉर्ड को हैश के रूप में देता है ... एक सक्रिय्रेकॉर्ड ऑब्जेक्ट नहीं। आप उन्हें वापस प्राप्त करने के बराबर के लिए अटैचर्स (हैश) सेट करके रिकॉर्ड ऑब्जेक्ट को असाइन कर सकते हैं – baash05

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