2012-03-20 13 views
5

मैं निम्नलिखित संघ है:कैसे पता चलेगा कि मॉडल स्वचालित रूप से किस प्रकार से नष्ट हो जाता है: निर्भर =>: रेल में नष्ट हो जाते हैं?

class Parent < ActiveRecord::Base 
    has_many :children, :dependent => :destroy 
    before_destroy :do_some_stuff 
end 

class Child < ActiveRecord::Base 
    belongs_to :parent 
    before_destroy :do_other_stuff 
end 

मैं do_other_stuff में जानना चाहते हैं कि विनाश निर्भर द्वारा चलाई गई है चाहते हैं => नष्ट या नहीं, क्योंकि यह का हिस्सा/do_some_stuff में किया जाएगा होगा

मैंने कोशिश की parent.destroyed?, parent.marked_for_destruction?, parent.frozen? लेकिन कुछ भी काम:/

किसी भी विचार?

+1

उपयोग कर सकते हैं मुझे नहीं लगता कि 'parent' उपलब्ध नहीं होगा । यह पहले से ही चला गया है। – tadman

+2

अभिभावक नष्ट होने से पहले बच्चों को नष्ट कर दिया जाता है। अभिभावक, afaik पर कोई झंडा उपलब्ध नहीं होगा। –

+1

@tadman गलत है। 'माता-पिता' मौजूद है जब निर्भर वस्तु नष्ट हो रही है, क्योंकि बच्चों को 'माता-पिता' नष्ट होने से पहले नष्ट कर दिया जाता है। आदेश निम्नानुसार प्रतीत होता है: 'पहले_डस्ट्राय' कॉलबैक को 'बच्चों' पर नष्ट होने से पहले निकाल दिया जाता है, 'बच्चों' को नष्ट कर दिया जाता है, 'माता-पिता' पर कॉलबैक को हटा दिया जाता है, 'माता-पिता', 'आखिरकार' नष्ट हो जाता है। क्या आप 'do_some_stuff' विधि में जो करने का प्रयास कर रहे हैं उसका तर्क ले जा सकते हैं? टिप्पणियों के लिए – Batkins

उत्तर

0

हो सकता है कि ऐसा ही कुछ: जब निर्भर वस्तुओं को नष्ट कर दिया जा रहा है

class Parent < ActiveRecord::Base 
    has_many :children 
    before_destroy :some_stuff 
    def some_stuff 
     children.each do |child| 
      child.parent_say_bye 
     end 
    end 
end 

class Child < ActiveRecord::Base 
    belongs_to :parent 
    before_destroy :do_other_stuff 
    def parent_say_bye 
     #do some stuff 
     delete 
    end 
end 
+0

हाँ, यह तब भी कर सकता है जब :dependent => :destroy तब आवश्यक नहीं है। मैं ऐसा करने के लिए थोड़ा निराश होगा क्योंकि तब मैं रेल कुछ प्रस्तावों को फिर से शुरू करता हूं ... –

+0

मुझे नहीं लगता कि यह एक अच्छा समाधान है, लेकिन यह काम करता है। हालांकि '0: dependent =>: नष्ट करें ' –

+1

का उल्लेख करने के लिए धन्यवाद, यही कारण है कि मैं': निर्भर =>: delete_all' के साथ समाप्त हुआ और माता-पिता –

3

आप संघ कॉलबैक (before_remove या after_remove)

class Parent < ActiveRecord::Base 
    has_many :children, :dependent => :destroy, :before_remove => :do_foo 

    before_destroy :do_bar 

    def do_bar 
    end 

    def do_foo 
    end 
end 
+0

के' pre_destroy' में नौकरी (विनाश लॉगिंग) हाय, अच्छा पकड़ । मैं 'आश्रित =>: delete_all' के साथ समाप्त हुआ और माता-पिता के' pre_destroy' में नौकरी (विनाश लॉगिंग) कर रहा हूं। –

संबंधित मुद्दे

 संबंधित मुद्दे