रेल 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 क्वेरी चलाएं ...
स्रोत
2011-02-17 00:03:01
क्या आप एक उदाहरण प्रदान कर सकते हैं? – Martin
लौटने के लिए एक और तरीका एसक्यूएल कोड स्वयं लिखना और वापसी * रखना है। कॉल प्रत्येक रिकॉर्ड को हैश के रूप में देता है ... एक सक्रिय्रेकॉर्ड ऑब्जेक्ट नहीं। आप उन्हें वापस प्राप्त करने के बराबर के लिए अटैचर्स (हैश) सेट करके रिकॉर्ड ऑब्जेक्ट को असाइन कर सकते हैं – baash05