मेरे पास एक ActiveRecord मॉडल है जिसमें एक लंबा स्ट्रिंग फ़ील्ड है। असल में, यह स्ट्रिंग एक सरणी का प्रतिनिधित्व करती है जिसे मैं संपूर्ण स्ट्रिंग की प्रतिलिपि बनाने के बजाय जगह में संशोधित करना चाहता हूं।क्या स्ट्रिंग फ़ील्ड को जगह में संशोधित करते समय मैं मॉडल को सहेजने के लिए ActiveRecord को मजबूर कर सकता हूं?
उदाहरण के लिए कहें Somemodel
में एक स्ट्रिंग फ़ील्ड array
है। उसके बाद निम्न को बचाने के लिए विफल रहता है:
m = Somemodel.first
m.array[someindex] = somevalue
m.save
वास्तव में, save
रिटर्न यह द्वारा सही array
ही object_id
है और तय करता है कि मॉडल नहीं बदला है और डेटाबेस के लिए गोल यात्रा को छोड़ देता है कि जाँच करने के लिए लगता है। है
m = Somemodel.first
a = String.new(m.array) # remember, the array is represented as a string
a[someindex] = somevalue
m.array = a
m.save
ध्यान दें कि m.array
अपने मूल्य को संशोधित करने के बाद स्थापित किया जाना है क्योंकि save
मूल्य पर और न केवल object_id
दिखता है:
मैं निम्नलिखित तरीके को का उपयोग कर समाप्त हो गया।
यह बोझिल लगता है और पूरे स्ट्रिंग की प्रतिलिपि बनाने की आवश्यकता है। बड़ी सरणी के लिए अच्छा नहीं है। क्या मैं save
को इन-मॉडल-संशोधित चेक को पूर्ववत सत्यापन परीक्षणों के बिना बाईपास कर सकता हूं? http://api.rubyonrails.org/classes/ActiveModel/Dirty.html: