जवाबों:
अंतर कॉलबैक के साथ है।
: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
कि आप 'निर्भर:: नष्ट' का उपयोग करें।