2012-08-16 15 views
39

मैं मौजूदा मॉडल में कुछ विशेषताओं को जोड़ना चाहता हूं जिन्हें जारी रखने की आवश्यकता नहीं है, या यहां तक ​​कि डेटाबेस कॉलम में मैप किया गया है। क्या ऐसी कोई चीज़ निर्दिष्ट करने का कोई समाधान है?गैर लगातार सक्रिय रिकॉर्ड मॉडल

+0

संभावित डुप्लिकेट [सक्रिय सक्रिय ऑर्डर करने के लिए अतिरिक्त रन-टाइम अटारी जोड़ना] (http://stackoverflow.com/questions/7584592/adding-extra-run-time-attribs-to-an-activerecord-object) – mlt

उत्तर

48

बेशक अच्छी पुरानी रूबी के attr_accessor का उपयोग करें। अपने मॉडल में: लेकिन विशेषता दृढ़ रहना करने के बाद to_json बुलाया गया था था

object.foo = 'baz' 
object.foo #=> 'baz' 
+14

ऑब्जेक्ट के जेएसओएन प्रारूप में यह विशेषता कैसे प्राप्त करें? कहें, मैं चाहता हूं कि यह विशेषता क्लाइंट साइड पर ऑब्जेक्ट के JSON में दिखाई दे। क्या मैं इसे प्राप्त करूंगा? अभी तक मुझे यह नहीं मिल रहा है, भले ही मैंने इसे अपनी निर्माण विधि में सेट किया हो। यह कैसे करना है? – Yash

+0

और रेल 4 में? – monteirobrena

+1

@monteirobrena एक ही चीज़ – apneadiving

26

मैं एक ही समस्या हो रही थी मैं मॉडल bootstrap करने की जरूरत है, तो:

attr_accessor :foo, :bar 

आप ऐसा करने में सक्षम हो जाएगा । इसके लिए आपको एक अतिरिक्त चीज़ करने की ज़रूरत है।

attr_accessor :foo 

तो फिर तुम गुण आप चाहते हैं निर्दिष्ट कर सकते हैं:

रूप apneadiving ने कहा, सबसे आसान तरीका शुरू करने के लिए अपने मॉडल के लिए जाने के लिए और जोड़ना है। लेकिन विशेषता छड़ी बनाने के लिए आपको गुण विधि को बदलने की आवश्यकता है।

def attributes 
    super.merge('foo' => self.foo) 
end 
1

मेरे मामले में मैं एक बाईं उपयोग करना चाहता था कस्टम विशेषता को पॉप्युलेट करने में शामिल होने: अपने मॉडल फ़ाइल में इस विधि जोड़ें। यह काम करता है अगर मैं कुछ भी नहीं जोड़ता लेकिन मैं भी एक नई वस्तु पर विशेषता सेट करने में सक्षम होना चाहता हूं और निश्चित रूप से यह अस्तित्व में नहीं है। यदि मैं attr_accessor जोड़ता हूं तो यह select के बाद हमेशा nil लौटाता है। यहां नई दृष्टिकोण पर सेट करने और बाएं जुड़ने से पुनर्प्राप्त करने के लिए उन कार्यों के साथ समाप्त किया गया दृष्टिकोण है।

after_initialize do 
    self.foo = nil unless @attributes.key?("foo") 
end 

def foo 
    @attributes["foo"] 
end 

def foo=(value) 
    @attributes["foo"] = value 
end 
+0

रेल 4.2 में अब और काम नहीं करता है। '@ विशेषताएँ 'अब एक' ActiveRecord :: विशेषता SET' है जो' [] 'का समर्थन करता है लेकिन' [] = 'नहीं। – davogones

5

मामले में किसी को भी सोच रहा है कि कैसे को देखने के लिए इस प्रस्तुत करने के लिए है, तो जैसे, विधि प्रस्तुत करना के लिए विधि तर्क का उपयोग करें:

render json: {results: results}, methods: [:my_attribute] 

कृपया ध्यान रखें कि यह तभी काम करता है आप attr_accessor सेट आपके मॉडल पर और कंट्रोलर एक्शन में विशेषता सेट करें, क्योंकि चयनित उत्तर समझाया गया है।

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