बचत, उपयोग या तो बिना एक ActiveRecord मॉडल के लिए मूल्यों की बड़े पैमाने पर काम के लिए assign_attributesया attributes=तरीकों। ये तरीके रेल 3 और नए में उपलब्ध हैं। हालांकि, इसके बारे में जागरूक होने के लिए मामूली अंतर और संस्करण-संबंधी गोच हैं।
दोनों विधियाँ इस उपयोग का अनुसरण करती हैं:
@user.assign_attributes{ model: "Sierra", year: "2012", looks: "Sexy" }
@user.attributes = { model: "Sierra", year: "2012", looks: "Sexy" }
ध्यान दें कि न तो विधि सत्यापन करेगा या कॉलबैक निष्पादित नहीं करेगा; कॉलबैक और सत्यापन तब होगा जब saveकॉल किया जाएगा।
रेल 3
attributes=assign_attributesरेल 3 से थोड़ा अलग है । attributes=यह जाँच करेगा कि जो तर्क पास किया गया वह एक हैश है, और यदि यह नहीं है तो तुरंत वापस आ जाता है; assign_attributesऐसा कोई हैश चेक नहीं है। के लिए ActiveRecord विशेषता असाइनमेंट API दस्तावेज़attributes= देखें ।
निम्नलिखित अमान्य कोड केवल विशेषताओं को सेट किए बिना चुपचाप विफल हो जाएंगे:
@user.attributes = [ { model: "Sierra" }, { year: "2012" }, { looks: "Sexy" } ]
attributes= चुपचाप व्यवहार करेंगे जैसे कि असाइनमेंट सफलतापूर्वक किए गए थे, जब वास्तव में, वे नहीं थे।
यह अमान्य कोड एक अपवाद बढ़ाएगा जब assign_attributesएन्कोडिंग सरणी के हैश कीज़ को सख्त करने की कोशिश की जाएगी :
@user.assign_attributes([ { model: "Sierra" }, { year: "2012" }, { looks: "Sexy" } ])
assign_attributesके लिए एक NoMethodErrorअपवाद उठाएगा stringify_keys, यह दर्शाता है कि पहला तर्क कोई हैश नहीं है। अपवाद स्वयं वास्तविक कारण के बारे में बहुत जानकारीपूर्ण नहीं है, लेकिन यह तथ्य कि अपवाद होता है, बहुत महत्वपूर्ण है।
इन मामलों के बीच एकमात्र अंतर सामूहिक असाइनमेंट के लिए उपयोग की जाने वाली विधि है: attributes=चुपचाप सफल होता है, और assign_attributesयह सूचित करने के लिए अपवाद उत्पन्न करता है कि त्रुटि हुई है।
ये उदाहरण विवादित लग सकते हैं, और वे एक हद तक हैं, लेकिन एपीआई से डेटा परिवर्तित करते समय, या केवल डेटा परिवर्तन की एक श्रृंखला का उपयोग करने और Hash[]फाइनल के परिणामों को भूल जाने पर इस प्रकार की त्रुटि आसानी से हो सकती है .map। अपने विशेषता असाइनमेंट से हटाए गए कुछ कोड 50 से ऊपर कोड और 3 फ़ंक्शन बनाए रखें, और आपको विफलता के लिए एक नुस्खा मिला है।
रेल 3 के साथ सबक यह है: हमेशाassign_attributes इसके बजाय उपयोग करें attributes=।
रेलें ४
रेल 4 में, attributes=बस एक उपनाम है assign_attributes। के लिए ActiveRecord विशेषता असाइनमेंट API दस्तावेज़attributes= देखें ।
रेल 4 के साथ, या तो विधि का उपयोग परस्पर विनिमय किया जा सकता है। पहले तर्क के रूप में हैश को पारित करने में विफलता के परिणामस्वरूप बहुत ही उपयोगी अपवाद होगा:ArgumentError: When assigning attributes, you must pass a hash as an argument.
सत्यापन
यदि आप तैयारी में पूर्व उड़ान असाइनमेंट कर रहे हैं save, तो आप को बचाने से पहले, साथ ही मान्य करने में रुचि हो सकती है। इसके लिए आप valid?और invalid?तरीकों का इस्तेमाल कर सकते हैं । दोनों बूलियन मान लौटाते हैं। valid?यह सच है कि यदि सहेजा गया मॉडल सभी मान्यताओं या झूठ को पारित करता है, अगर वह ऐसा नहीं करता है। invalid?बस का उलटा हैvalid?
valid? इस तरह इस्तेमाल किया जा सकता है:
@user.assign_attributes{ model: "Sierra", year: "2012", looks: "Sexy" }.valid?
यह आपको कॉल करने से पहले किसी भी सत्यापन के मुद्दों को संभालने की क्षमता देगा save।