2013-12-12 5 views
23

मैं कभी-कभी मॉडल के लिए कोड में विशेषता एक्सेसर्स/पाठकों/लेखकों को देखता हूं। क्या ये आवश्यक हैं यदि मैं व्यू/कंट्रोलर कोड से विशेषताओं को अपडेट करने में सक्षम होना चाहता हूं?रेल में attr_accessor क्यों आवश्यक है?

मैं एक नौसिखिया हूं इसलिए मैं वास्तव में बुनियादी अनुप्रयोगों के बारे में बात कर रहा हूं।

उत्तर

52

attr_accessor रूबी की मुख्य विशेषता है और इसका उपयोग गेटर और सेटर विधियों के साथ आवृत्ति चर उत्पन्न करने के लिए किया जाता है। इसका उपयोग मूल रूबी में कभी भी आवश्यक नहीं है (यह एक सुविधा है)।

ActiveRecord मॉडल के मामले में, गेटर्स और सेटर्स पहले से ही आपके डेटा कॉलम के लिए ActiveRecord द्वारा जेनरेट किए गए हैं। attr_accessor आवश्यक या वांछनीय नहीं है।

यदि आपके पास अतिरिक्त इंस्टेंस डेटा है तो आपको जारी रखने की आवश्यकता नहीं है (यानी यह डेटाबेस कॉलम नहीं है), तो आप कोड की कुछ पंक्तियों को सहेजने के लिए attr_accessor का उपयोग कर सकते हैं।

इसी तरह नामित attr_accessible - जिसे अक्सर रेल कोड में देखा जाता है और attr_accessor के साथ उलझन में आता है - ActiveRecord मॉडल के भीतर बड़े पैमाने पर असाइनमेंट को नियंत्रित करने की एक बहिष्कृत विधि है। रेल 4 बॉक्स के बाहर इसका समर्थन नहीं करता है; इसे मजबूत पैरामीटर्स द्वारा प्रतिस्थापित किया गया है, जो अधिक बारीक नियंत्रण की अनुमति देता है।

24

यदि आप attr_accessor घोषित करते हैं तो आप इसे virtual attribute के रूप में उपयोग कर सकते हैं, जो मूल रूप से उस मॉडल पर एक विशेषता है जो डेटाबेस के लिए जारी नहीं है।

उदाहरण केस: आप अपने User मॉडल में attr_accessor :password घोषित करें ताकि आप इसे नए उपयोगकर्ता फ़ॉर्म में फ़ील्ड के रूप में उपयोग कर सकें। जब आप संबंधित create कार्रवाई में अपना पासवर्ड प्राप्त करते हैं, तो आप hashed_password प्राप्त कर सकते हैं, इसे डेटाबेस में जारी रख सकते हैं, और दिए गए password को छोड़ दें (जो अनुरोध के अंत में स्वचालित रूप से किया जाता है)।

3

आम तौर पर यह एक मॉडल पर किसी भी चीज़ के लिए attr_accessor को सजाने के लिए एक बहुत अच्छा विचार है जो SQL तालिका में वास्तविक कॉलम नहीं है। रेल 4 या नहीं। यह आपको मॉडल में क्या है और क्या जारी है इसकी स्पष्ट समझ देता है।

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