6

रेल पर रूबी में 4, मान लीजिए कि माता-पिता के कई बच्चे हैं। जब माता-पिता को हटा दिया जाता है, तो बच्चों को भी हटा दिया जाना चाहिए। इसके अलावा, बच्चा तब तक नहीं हटाया जाएगा जब तक कि यह अनाथ न हो। उसको कैसे करे?रेल बच्चे को हटाने से रोकते हैं जब तक कि माता-पिता को हटाया जा रहा हो,

मैं के साथ निम्न

class Parent < ActiveRecord::Base 
    has_many :children, inverse_of: :parent, dependent: :destroy 
end 

class Child < ActiveRecord::Base 
    belongs_to :parent, inverse_of: :children 
    before_destroy :checks 
private 
    def checks 
    not parent # true if orphan 
    end 
end 

before_destroy जांच के साथ, तथापि, कुछ भी नहीं नष्ट कर दिया जाता है की कोशिश की। क्या इस विधि को बताने का कोई तरीका है यदि बुलाए जाने का कारण माता-पिता हटाना है?

क्या यह पूछने के लिए एक अजीब चीज है? मेरा मतलब है, बच्चों को हटाने से रोकें।

+0

जब तक आपके ऐप में कोड शामिल नहीं होता है जो बच्चों को सीधे हटा देता है, तो उन्हें सीधे हटाने के लिए असंभव होना चाहिए, जबकि माता-पिता को हटाने के हिस्से के रूप में उन्हें हटाया जा सकता है। मुझे समझ में नहीं आता कि आप इस मुद्दे में कैसे चल रहे हैं। क्या आप कृपया अधिक विशिष्ट हो सकते हैं? – monfresh

+0

आप सही हैं। धन्यवाद। – user2553863

उत्तर

5

Rails: how to disable before_destroy callback when it's being destroyed because of the parent is being destroyed (:dependent => :destroy) से कार्प के जवाब से काम करते हुए, इस प्रयास करें:

बाल:

belongs_to :parent 
before_destroy :prevent_destroy 
attr_accessor :destroyed_by_parent 

... 

private 

def prevent_destroy 
    if !destroyed_by_parent 
    self.errors[:base] << "You may not delete this child." 
    return false 
    end 
end 

जनक:

has_many :children, :dependent => :destroy 
before_destroy :set_destroyed_by_parent, prepend: true 

... 

private 

def set_destroyed_by_parent 
    children.each{ |child| child.destroyed_by_parent = true } 
end 

क्योंकि हम मानसिक उन्माद का उपयोग कर रहे यह करने के लिए किया था, और dependent: delete_all उन्हें नरम-हटाने के बजाए हार्ड-डिलीट करना होगा। मेरा आंत मुझे बताता है कि ऐसा करने का एक बेहतर तरीका है, लेकिन यह स्पष्ट नहीं है, और यह काम पूरा हो जाता है।

+0

मुझे एक ही समस्या थी लेकिन has_one रिश्ते के साथ। मैंने थोड़ा अलग तरीके से हल किया, लेकिन मुझे यह भी लगता है कि ऐसा करने का एक बेहतर तरीका होना चाहिए। [मेरा समाधान] (http://stackoverflow.com/questions/23533552/rails-4-activerecord-prevent- निर्भर- destroy-if-owner-exists) – hector

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