यह अस्पष्ट रूप से संबंधित है: How to Update all Dates in a Table लेकिन केवल तभी यदि आप वास्तविक कड़ी मेहनत करते हैं।प्रति-रिकॉर्ड आधार पर तालिका में पहले से मौजूद डेटा का उपयोग करके रेल 3 अपडेट_ल
भाग 1 - मुझे पता है कि SQL एक सूत्र पर आधारित एक तालिका पर एक कॉलम अपडेट कर सकता है जिसमें उसी तालिका में अन्य कॉलम शामिल हैं। और यह एसक्यूएल का एक, आसान लाइन के साथ किया जा सकता है इस प्रकार है:
UPDATE thieving_prices SET current_price = (1 + usury_rate) * current_price;
अब सभी की कीमतों सिर्फ अपने विभिन्न संबद्ध खलनायक दरों से बढ़ी किया गया है।
भाग 2 - मुझे यह भी पता है कि रेल 3 जादू का एक अद्भुत सा update_all जो एसक्यूएल की एक पंक्ति का उपयोग कर एक अद्यतन क्वेरी बनाता है कहा जाता है प्रदान करता है:
ThievingPrice.update_all(:current_price = 35000.00)
उत्पन्न करता है:
UPDATE thieving_prices SET current_price = 35000.00;
अब सभी कीमतें सभी उत्पादों के लिए समान हैं। इस चुस्त दुकान में बहुत बेकार।
भाग 3 - इन सभी कीमतों में वृद्धि की अपनी स्थिर दर है और इसे पूरा करने के लिए रेल 3 में कोड की एक सुंदर रेखा लिखने का एक तरीका होने के लिए कुछ भी है।
और लाइन:
ThievingPrice.update_all(:current_price => (1 + :usury_rate) * :current_price)
काम नहीं करता। न ही किसी भी वाक्य रचनात्मक भिन्नता जिसमें ब्रांड्स, ब्रेसिज़ या ब्रैकेट शामिल हैं - जहां तक मेरे प्रयोग दिखाए गए हैं। निश्चित रूप से दूसरों को इस तरह के निर्माण की जरूरत है। मैं अविश्वसनीय रूप से धीमी गति से और संसाधन-बर्बाद कर प्रत्येक ब्लॉक पर वापस गिर नहीं करना चाहती:
ThievingPrice.each do |tp|
new_price = tp.current_price * (1 + tp.usury_rate)
tp.update_attribute(:current_price => new_price)
end
समय है कि मेरी
पीड़ितों
संरक्षक दुकान छोड़ दिया है खत्म करके। मेरे विकल्प क्या हैं?
क्या 'ThievingPrice.update_all (" current_price = (1 +?) * Current_price ",: usury_rate) 'विफल? – ScottJShea
नहीं, यह स्ट्रिंग 'usury_rate' –
द्वारा गुणा करने की कोशिश करता है, लेकिन, क्योंकि यह डेटाबेस पर संग्रहीत होने से पहले डेटा पर आधारित है, मैं सुरक्षित रूप से आपके सुझाव को अलग-अलग कर सकता हूं: ThievingPrice.update_all ("current_price = (1 + # {: usury_rate}) * current_price) और यह काम करता है। इसे मुझे अलग तरीके से देखने में मदद के लिए धन्यवाद। –