हैश फ़ील्ड के साथ बात यह है कि यह जितना चाहें उतना गतिशील हो सकता है। इसलिए आपके डीबी स्कीमा को आपके कोड में बग के कारण अनपेक्षित फ़ील्ड के साथ प्रदूषित करने से रोकने के लिए यह कार्यक्षमता डिफ़ॉल्ट रूप से अक्षम है।
नहीं, आप अपने हैश के लिए 2-चरणीय अपडेट का उपयोग करके बिल्कुल भी अटके नहीं हैं!
[],[]=read_attribute()
. के लिए शॉर्टकट हैं और write_attribute()
और यदि आप Mongoid::Attributes::Dynamic
शामिल नहीं करते हैं तो इसका उपयोग किया जाना चाहिए . यदि आप $set
. का उपयोग करने का प्रयास करते हैं डायनामिक विशेषताओं को सक्षम किए बिना आपको नो-मेथड त्रुटि मिलेगी क्योंकि यह आपकी डायनामिक विशेषताओं को परिभाषित विशेषताओं के रूप में नहीं देखती है।
अगर आप Mongoid::गुण::गतिशील तब आप पाएंगे कि यह गतिशील विशेषताओं की कार्यक्षमता को जोड़ने के लिए आवश्यक है।
Mongoid::Attributes::Dynamic
. को शामिल करके मानों को अपडेट करने के लिए आपको इन चरणों का पालन करने की आवश्यकता है:
thing = Thing.first
thing.set("info.endDate" => Time.now)
thing.reload # This will update the current variable
अन्यथा यदि आपको आवश्यकता हो तो आप इसे आसानी से छोड़ सकते हैं और 2-चरणीय विधि द्वारा मूल्य अद्यतन कर सकते हैं
मुझे आशा है कि यह आपकी क्वेरी पर कुछ प्रकाश डालेगा।
स्रोत:
Rails mongoid डायनामिक फील्ड्स - नो मेथड एरर
Rails and Mongoid के साथ डायनामिक एट्रिब्यूट