2011-05-16 20 views
6

मेरे पास एक रेल ऐप है जो ब्लॉगिंग प्लेटफॉर्म है, जो कई योगदान लेखकों की अनुमति देता है। मेरा उपयोगकर्ता मॉडल में है: लेखक लेखन अनुमतियों को निर्दिष्ट करने के लिए बूलियन विशेषता। हालांकि, : लेखकattr_accessibleउपयोगकर्ता मॉडल के लिए सूचीबद्ध नहीं है।मॉडल गुणों को अपडेट करना

मैं कंसोल के माध्यम से

User.find_by_id(user_id).update_attribute(:writer, true/false) 

चलाए बिना एक तरह से वेब के माध्यम से इस विशेषता को संपादित करने के लिए करना चाहता था, है, लेकिन अगर यह असंभव होगा मैं सोच रहा हूँ लिस्टिंग बिना: लेखकके तहत उपयोगकर्ता मॉडल के लिए attr_accessible। मेरे पास केवल व्यवस्थापक-उपयोगकर्ताओं के लिए कई पृष्ठ उपलब्ध हैं, और मैं टॉगल करने की क्षमता रखने में सक्षम होना चाहता हूं: लेखक उन विचारों के भीतर विशेषता।

यदि यह वास्तव में संभव है, तो यह कैसे किया जा सकता है? आपकी सहायता के लिये पहले से ही धन्यवाद!

संपादित करें: मुझे प्राप्त हुए कुछ उत्तरों के आधार पर, मुझे लगता है कि मेरे प्रश्न में अधिक विशिष्ट होना चाहिए था। मैं क्षमाप्रार्थी हूं। मैं समझता हूं कि मैं अभी भी को अलग-अलग अपडेट कर सकता हूं: लेखक विशेषता, जैसा कि बेरलिंगटन और हितेश ने इंगित किया है। मैं जो जानना चाहता था वह इस तरह के एक समारोह को देखने के माध्यम से कैसे कार्यान्वित कर सकता था। क्या लेखक को टॉगल करने के लिए एक क्लिक करने योग्य लिंक बनाना संभव होगा? हो सकता है कि एक लिंक नियंत्रक फ़ंक्शन को कॉल करें और उचित उपयोगकर्ता_आईडीके लिए पास करें: लेखक टॉगलिंग?

उत्तर

7

attr_accessible और केवल mass-assignment स्थित विशेषताओं की रक्षा attr_protected। तुम अब भी हालांकि अन्य साधनों के माध्यम से उन्हें प्रदान कर सकते हैं:

जन असाइनमेंट (काम नहीं करेगा):

model.update_attributes(:admin => true) 

गैर जन असाइनमेंट (विकल्प 1):

model.admin = boolean 
model.save 

गैर जन असाइनमेंट (विकल्प 2):

model.send(:attributes=, attributes, false) 

गैर जन असाइनमेंट (विकल्प 3):

model.update_attribute(admin, boolean) 

मुझे व्यक्तिगत रूप से इन मैन्युअल विकल्पों में से कोई भी पसंद नहीं है, इसलिए मैंने sudo_attributes नामक एक मणि लिखा जो "सूडो" विधियों का उपयोग करके बड़े पैमाने पर असाइनमेंट को ओवरराइड करना आसान बनाता है।

+0

धन्यवाद बेरलिंगटन! क्या दृश्य के माध्यम से इन विकल्पों में से किसी एक को लागू करने का कोई तरीका है, शायद एक बटन या क्लिक करने योग्य लिंक के माध्यम से? – ArcGhost

+0

यह दृश्य में नहीं हो सका और आपको अपने नियंत्रक या मॉडल में होना होगा। –

+0

अगर मैं इसे नियंत्रित करने के लिए एक तरीका बनाना चाहता था, तो कहें, tolog_writer, मेरे नियंत्रक में, _that_ को बटन या क्लिक करने योग्य लिंक के माध्यम से बुलाया जा सकता है? – ArcGhost

1

उपयोग इस

User.find_by_id(user_id).update_attribute(:writer, true) or 
User.find_by_id(user_id).update_attribute(:writer, false) 
संबंधित मुद्दे