मैं मॉडल में इस का उपयोग करके कुछ मॉडलों के लिए अद्यतन किया गया है को रोकने:मैं एक फ़ील्ड को छोड़कर अपडेट को कैसे अस्वीकार कर सकता हूं?
def update
self.errors.add_to_base("Cannot update a #{ self.to_s }")
end
मैं अब कि मॉडल के लिए कुछ अतिरिक्त कार्यक्षमता बचाता है एक प्लगइन लिख रहा हूँ, और मैं में एक क्षेत्र अद्यतन करने की आवश्यकता आदर्श। मैं एक प्लगइन का उपयोग नहीं कर रहे थे, तो मैं सीधे मॉडल में ऐसा होता ...
def update
if self.changed == ['my_field']
super
else
self.errors.add_to_base("Cannot update a #{ self.to_s }")
end
end
मैं अपने प्लगइन से ही ऐसा नहीं कर सकते क्योंकि मैं अगर अद्यतन व्यवहार ActiveRecord डिफ़ॉल्ट है पता नहीं है , या अद्यतनों को रोकने के लिए ओवरराइड किया गया है। क्या मुझे एक विशिष्ट फ़ील्ड के लिए ओवरराइड करने की अनुमति देते हुए रिकॉर्ड अपडेट को रोकने का एक और तरीका है (और केवल उस उदाहरण में जहां मेरी प्लगइन इस मॉडल पर लागू होती है)।
धन्यवाद। मुझे एहसास हुआ कि जिन मॉडलों को मेरे prevent_update तर्क की आवश्यकता है वे भी प्लगइन की आवश्यकता है, इसलिए मैंने सुझाव दिया है कि पहले_update फ़िल्टर का उपयोग करके, मैंने प्लगइन में पूरी तरह से स्थानांतरित कर दिया है। – Nick
रेल में 3. *, 'self.errors.add: बेस के माध्यम से त्रुटि जोड़ें, "अपडेट नहीं किया जा सकता ..." ' – ronen
मुझे लगता है कि आप शायद चाहते हैं कि अगर क्लॉज स्वयं को वापस कर दिया जाए तो स्वयं को वापस कर दें। updateatabale_attributes == self.updatabale_attributes' ताकि आप updatable_attributes के सबसेट को भी अपडेट कर सकें। – Timo