जवाबों:
अंतर कॉलबैक के साथ है।
:delete_allसीधे अपने आवेदन में किए गए और SQL से हटा देता है:
DELETE * FROM users where compagny_id = XXXX
के साथ :destroy, आपके सभी बच्चों का एक पल है। इसलिए, यदि आप इसे नष्ट नहीं कर सकते हैं या यदि प्रत्येक का अपना है :dependent, तो इसके कॉलबैक कहे जा सकते हैं।
रेल के मॉडल एसोसिएशन पर आप :dependentविकल्प को निर्दिष्ट कर सकते हैं , जो निम्नलिखित तीन रूपों में से एक ले सकता है:
:destroy/:destroy_allइस ऑब्जेक्ट के साथ संबंधित ऑब्जेक्ट्स को उनके destroyतरीके से कॉल करके नष्ट कर दिया जाता है:delete/:delete_allसभी संबंधित वस्तुओं को उनकी :destroyविधि को कॉल किए बिना तुरंत नष्ट कर दिया जाता है:nullifyसभी संबंधित ऑब्जेक्ट्स की विदेशी कुंजियाँ NULLउनके saveकॉलबैक को कॉल किए बिना सेट की जाती हैं:restrict। यदि इसके लिए सेट किया गया है: इस ऑब्जेक्ट को प्रतिबंधित किया जा सकता है यदि इसके पास कोई संबद्ध ऑब्जेक्ट नहीं है।
:deleteया :destroy_allइसके बारे में दिखता द्वारा विकल्प? : आश्रित विकल्प या तो उम्मीद करता है: नष्ट,: delete_all,: nullify या: प्रतिबंधित (: हटाएं)
:deleteऔर :destroy_allविकल्प मौजूद नहीं हैं। हालांकि, मॉडल पर वर्ग विधियां हैं जिन्हें कहा जाता है deleteऔर destroy_allइसलिए यह भ्रम का कारण हो सकता है।
देखें हटाए नष्ट उसके संबंधित तत्वों जहां delete_all स्वयं मेज से एक से अधिक डेटा को नष्ट कर सकते के रूप मेंDELETE * FROM table where field = 'xyz'
: आश्रित संभावित विकल्प:
नियंत्रित करता है कि संबंधित वस्तुओं का क्या होता है जब उनका मालिक नष्ट हो जाता है। ध्यान दें कि ये कॉलबैक के रूप में कार्यान्वित किए गए हैं, और क्रम में कॉलबैक निष्पादित करता है। इसलिए, अन्य समान कॉलबैक प्रभावित कर सकते हैं: निर्भर व्यवहार, और :dependentव्यवहार अन्य कॉलबैक को प्रभावित कर सकता है।
:destroy सभी संबद्ध वस्तुओं को भी नष्ट कर दिया जाता है।
:delete_all डेटाबेस से सभी संबंधित ऑब्जेक्ट को सीधे हटा दिया जाता है (इसलिए कॉलबैक निष्पादित नहीं किया जाएगा)।
:nullifyविदेशी कुंजियों को NULL पर सेट करने का कारण बनता है। कॉलबैक निष्पादित नहीं किए जाते हैं।
:restrict_with_exception यदि कोई संबद्ध रिकॉर्ड हैं तो एक अपवाद को उठाया जा सकता है।
:restrict_with_error यदि कोई संबद्ध ऑब्जेक्ट हैं तो स्वामी को जोड़ने के लिए एक त्रुटि का कारण बनता है।
यदि :throughविकल्प के साथ प्रयोग किया जाता है, तो जुड़ने वाले मॉडल पर संघ का एक___ होना चाहिए, और जो रिकॉर्ड हटा दिए जाते हैं, वे संबद्ध रिकॉर्ड के बजाय शामिल रिकॉर्ड होते हैं।
वास्तव में मुख्य अंतर यह है कि किसी भी कॉलबैक :delete_allका उपयोग किए जाने पर आह्वान नहीं किया जाएगा । लेकिन जब :destroyकॉलबैक स्टैक का उपयोग किया जाता है ( :after_destroy, :after_commit...) निकाल दिया जाएगा।
नतीजतन, यदि आपके पास touch:हटाए जा रहे मॉडलों में घोषणाएं हैं तो बेहतर है dependent: :delete_allकि आप 'निर्भर:: नष्ट' का उपयोग करें।