मेरे पास एक ऐसा एप्लिकेशन है जहां मैं अपने कई मॉडल के लिए नष्ट करने के व्यवहार को ओवरराइड करना चाहता हूं। उपयोग का मामला यह है कि उपयोगकर्ताओं को एक विशेष रिकॉर्ड को हटाने की वैध आवश्यकता हो सकती है, लेकिन वास्तव में डेटाबेस से पंक्ति को हटाने से रेफरेंसियल अखंडता नष्ट हो जाएगी जो अन्य संबंधित मॉडलों को प्रभावित करती है। उदाहरण के लिए, सिस्टम का एक उपयोगकर्ता उस ग्राहक को हटाना चाहता है जिसके साथ वे अब व्यवसाय नहीं करते हैं, लेकिन उस ग्राहक के साथ लेनदेन को बनाए रखने की आवश्यकता है।Rails ActiveRecord व्यवहार को नष्ट करने का सबसे अच्छा तरीका क्या है?
ऐसा लगता है मैं कम से कम दो विकल्प हैं: जरूरी मॉडल में
- डुप्लीकेट डेटा को प्रभावी ढंग से अपने डेटा मॉडल denormalizing ताकि हटाए गए रिकॉर्ड से संबंधित डेटा को प्रभावित नहीं करेगा।
- ActiveRecord के "नष्ट" व्यवहार को ओवरराइड करने के लिए कुछ ऐसा करने के लिए एक ध्वज सेट करें जो उपयोगकर्ता को "हटाए गए" रिकॉर्ड को इंगित करता है और रिकॉर्ड को छुपाने के लिए इस ध्वज का उपयोग करता है।
क्या मुझे बेहतर तरीका याद आ रहा है?
विकल्प 1 मुझे एक भयानक विचार की तरह लगता है, हालांकि मुझे इसके विपरीत तर्क सुनना अच्छा लगेगा।
विकल्प 2 कुछ हद तक रेल-आश लगता है लेकिन मैं इसे संभालने का सबसे अच्छा तरीका सोच रहा हूं। क्या मुझे अपना खुद का अभिभावक वर्ग बनाना चाहिए जो ActiveRecord :: Base से प्राप्त होता है, वहां नष्ट विधियों को ओवरराइड करता है, फिर उन वर्गों में उस वर्ग से प्राप्त होता है जहां मैं यह व्यवहार चाहता हूं? क्या मुझे खोजक व्यवहार को ओवरराइड करना चाहिए, इसलिए हटाए गए रिकॉर्ड को डिफ़ॉल्ट रूप से वापस नहीं किया जाना चाहिए?
यदि मैंने ऐसा किया, तो मैं गतिशील खोजकर्ताओं को कैसे संभालेगा? नामित क्षेत्रों के बारे में क्या?
धन्यवाद मिलानू। आप सही हैं, मैं _do_ को फिर से डेटा का उपयोग करने की आवश्यकता है, इसलिए मैं जो खोज रहा हूं वह शून्य नहीं है। जबकि उनके उत्तर में वर्णित रयान की प्लगइन की सादगी आकर्षक है, व्यवहार के बारे में स्पष्ट होने के आपके तर्क ने मुझे राजी किया। मैं प्रतिक्रिया की सराहना करता हूं। –