2013-11-27 7 views
18

मुझे एक अजीब समस्या का सामना करना पड़ रहा है जो मेरे हिस्से पर उपयोगकर्ता त्रुटि होना चाहिए लेकिन इसे समझ नहीं सकता है।मैं रूबी 4.0.1/PostgreSQL Hstore पर रूबी के साथ डेटा रिकॉर्ड का मूल्य कैसे अपडेट कर सकता हूं?

मैं रूबी 1.9.3-पी 1 9 4, रेल 4.01, पोस्टग्रेएसक्यूएल का उपयोग कर रहा हूं।

मैं एक स्तंभ डेटा बुलाया कि एक hstore प्रकार है के साथ एक मॉडल, ग्राहक है,। किसी कारण से, मैं किसी भी नई कुंजी/मानों के साथ डेटा (hstore) कॉलम को अपडेट करने में सक्षम नहीं हूं और न ही मैं मौजूदा कुंजी के मान को अपडेट कर सकता हूं। मैं किसी भी मुद्दे को सम्मिलित कर सकता हूं और किसी भी मुद्दे/मूल्यों को निर्दिष्ट कर सकता हूं।

ग्राहक आईडी: 1, पहला_नाम: "मार्क", अंतिम_नाम: "परीक्षण", डेटा: {"संतुलन" => "0"}, बनाया_at: "2013-11-27 14:39:09", update_at : "2013-11-27 14:39:09"

c.data["balance"] = "100" 

c.save 

(0.2ms) शुरू

(0.3ms) COMMIT => true

अगर मैं एक update_attributes करते हैं, यह करता है बचाओ।

c.update_attributes({:data => {"balance" => "343"}}) 

मैं किसी भी त्रुटि या अपवाद नहीं दिख रहा है जब मैं c.save इस्तेमाल किया!। क्या किसी के भी पास कोई सुझाव है?

+0

गोली मार दी, लेकिन कैसे 0 के मूल संतुलन में वहाँ से मिला, और उसे सहेजें पर बुलाया जा रहा है? – davidfurber

+0

0 का मूल संतुलन केवल ग्राहक द्वारा किया गया था .create (: data => {"balance" => "0"}, आदि ...) – james

उत्तर

6

ठीक है अंत में मेरे प्रश्न का उत्तर मिला। यह पता चला है कि यह रेल 4.0 के भीतर एक बग है।

"ActiveRecord Hstore बग: हैश में एक महत्वपूर्ण अद्यतन नहीं कर सकते" https://github.com/rails/rails/issues/6127

23

मैं अभी भी इस अब काम करने के लिए और के लिए बग हल किया जा करने के लिए इंतज़ार नहीं कर सकता की जरूरत है, इसलिए यहाँ मेरी workaround है:

c.data["balance"] = "100" 
c.data_will_change! 
c.save 

... और यह डीबी को बचाएगा!

"attribute_name_will_change!" विधि है कि अच्छी तरह से प्रलेखित नहीं है और सक्रिय मॉडल गंदा मॉड्यूल का परिचय में पाया जा सकता: http://api.rubyonrails.org/classes/ActiveModel/Dirty.html

+0

हां, यह मेरे लिए भी काम करता है। धन्यवाद। – james

+0

यह मेरे लिए काम करता था, लेकिन मुझे _will_change का उपयोग करना पड़ा! मूल्य को बदलने के लिए मूल्य बदलने से पहले विधि - दस्तावेज कहता है कि आपको क्या करना चाहिए। – John

+0

सी। {जो भी आपके hstore कॉलम कहा जाता है} _will_change! – wbeange

5

उन्नत Hstore डॉक्स:

http://edgeguides.rubyonrails.org/active_record_postgresql.html#hstore

वे Hstore के लिए एक ही समाधान का उपयोग करने काम कर रहे हैं और जेसन ऑब्जेक्ट अपडेटिंग।

यह रेल 4.2 पर तय किया जाएगा।

पुल का अनुरोध: अंधेरे में https://github.com/rails/rails/pull/15674

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

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