2009-04-19 11 views
9

नियमित has_many के साथ, पेरेंट रिकॉर्ड हटा दिए जाने पर एसोसिएशन को हटाने के लिए :dependent => :destroy का विकल्प होता है। has_many :through के साथ, अन्य माता-पिता बच्चे के रिकॉर्ड से जुड़े हो सकते हैं, इसलिए :dependent => :destroy का कोई प्रभाव नहीं पड़ता है।अंतिम है_मनी के बाद एसोसिएशन को नष्ट करें: रिकॉर्ड हटा दिया गया है

आप कैसे सुनिश्चित करते हैं कि अंतिम एचएमटी एसोसिएशन से अनाथ होने के बाद बाल रिकॉर्ड हटा दिए गए हैं?

उत्तर

12

समाधान मैं पाया है इस जैसे, एक after_destroy कॉलबैक हो रहा है:

class Parent < ActiveRecord::Base 
    has_many :children, :through => :parentage 
    after_destroy :destroy_orphaned_children 

    private 

    def destroy_orphaned_children 
    children.each do |child| 
     child.destroy if child.parents.empty? 
    end 
    end 

end 
+0

एक पुराने प्रश्न/उत्तर में प्रहार करने के लिए चाहते हैं, मैं एक 'has_many था: through' एसोसिएशन; मैंने मॉडल के माध्यम से 'नष्ट' कहा, लेकिन मैं अनाथ हो सकता है कि एसोसिएशन के दूसरी तरफ किसी भी मॉडल को हटाना चाहता था। मैंने इस कोड को मॉडल के माध्यम से मेरे अंदर रखा है, और चूंकि अंत में मॉडल नष्ट हो रहा था, केवल एक 'belong_to' था, मैंने रैपिंग' प्रत्येक 'कॉल को हटा दिया। सही दिशा में ढेर के लिए धन्यवाद। –

3

में शामिल होने के मॉडल पर, का उपयोग करें "belongs_to: मॉडल, निर्भर: नष्ट"

उदाहरण के लिए

, यदि आप एक रोगी को नष्ट करने के लिए एक बार अपने डॉक्टर नष्ट हो जाता है, और डॉक्टर has_many रोगियों हालांकि नियुक्तियों

Class Appointment 
    belongs_to :doctor 
    belongs_to :patient, dependent: :destroy 

Class Doctor 
    has_many :appointments, dependent: :destroy 
    has_many :patients, through: :appointments 

Class Patient 
    has_many :appointments 
    has_many :doctors, through: :appointments 
+2

मुझे सभी मरीजों को नष्ट करने का विचार पसंद है :)) –

+0

मैं केवल एक मरीज को नष्ट करना चाहता हूं जब उसकी सभी नियुक्तियां नष्ट हो जाएंगी। जब तक कम से कम एक नियुक्ति छोड़ दी जाती है, मैं चाहता हूं कि रोगी जीवित रहे (अन्यथा वह नहीं आएगा और भुगतान करेगा :-) क्या आपका दृष्टिकोण इसके लिए उपयुक्त है या जब भी कोई नियुक्ति नष्ट हो जाती है तो क्या वह रोगी को नष्ट कर देगी? – silverdr