8

मैं 'attr_accessible' के रूप में, रेल 4 में वर्चुअल विशेषताओं (गेटर, सेटर) का उपयोग कैसे कर सकता हूं।रेल में वर्चुअल विशेषताएं 4

मैं इस मुद्दे मैं विधि से ऊपर तक पहुंचने के हो रही है, यहाँ

def tags_list 
    @tags = self.tags.collect(&:name).join(', ') 
    end 

सकते हैं, लेकिन नीचे सेटर तक पहुँचने में सक्षम नहीं है, जब अद्यतन करने के लिए कोशिश कर रहा/पैदा करते हैं।

def tags_list=(tags) 
    @tags = tags 
    end 
+1

क्या आप attr_accessible और attr_accessor मिश्रित हो रहे हैं? attr_accessible चले गए हैं - मजबूत पैरामीटर द्वारा प्रतिस्थापित किया जाएगा। लेकिन जहां तक ​​मुझे पता है, attr_accessor बनी हुई है। – Edward

+0

क्षमा करें, इसका attr_accessor: tag_list –

+2

यदि आप attr_accessor का उपयोग करते हैं तो आपको गेटटर या सेटर को परिभाषित करने की आवश्यकता नहीं है। attr_accessor एक मैक्रो है जो आपके लिए दोनों बनाता है। –

उत्तर

12

रेल 4 में वर्चुअल विशेषताओं का उपयोग करना attr_accessible के साथ काफी समान है। आपको बस अपने कंट्रोलर (attr_accessible के बजाय) में अनुमत पैराम में अपनी वर्चुअल विशेषता जोड़नी होगी, फिर अपने मॉडल में गेटटर और सेटर विधियों को सामान्य रूप से जोड़ें।

# your_controller.rb 
private 

def your_model_params 
    params.require(:your_model_name).permit(:tags_list) 
end 
+2

लेकिन यह इस समय # नया और #create के साथ काम नहीं करता है, जो इसे बहुत बेकार बनाता है, क्योंकि आपको हर समय अलग-अलग 'your_virtual_attr =: कुछ' लिखना होगा। किसी और ने यह देखा और इसे संभालने के तरीके पर एक सुराग है? – phikes

+1

मैंने यह भी देखा कि 'टैग.न्यू' (टैग_सूची: [1, 2]) को कॉल करना 'टैग_लिस्ट =()' आभासी विशेषता नहीं है .. क्या यह एक बग है? – Feech

+1

@phikes, क्या यह सिर्फ 'पहले_action: your_model_params' है? आप वैकल्पिक रूप से specfiy कर सकते हैं:, केवल: [: नया,: बनाना] या 'exlcude:, को छोड़कर: [: action1,: action2, आदि] '। –