2010-05-10 11 views
24

क्या यह सच है कि HABTM संबंध :dependent विकल्प का समर्थन नहीं करते हैं?habtm रिश्ते का समर्थन नहीं करता है: निर्भर विकल्प

class Person < ActiveRecord::Base 
    has_and_belongs_to_many :posts, :dependent => :destroy 
end 

मैं रेल की बढ़त की कोशिश कर रहा हूं।

उत्तर

18

हाँ, यह इसका समर्थन नहीं करता है। See the docs। आम तौर पर habtm केवल बहुत ही सरल मामलों के लिए है और यदि आपको अधिक जटिल चीजों की आवश्यकता शुरू होती है तो आपको has_many :through पर स्विच करना चाहिए।

73

आप सरल has_and_belongs_to_many संघ के लिए रखना चाहते हैं, तो आप इस जोड़ सकते हैं:

class Person < ActiveRecord::Base 
    has_and_belongs_to_many :posts 
    before_destroy { posts.clear } 
end 

कौन सा है कि person के सभी प्रविष्टियों की तालिका में शामिल होने के साफ हो जाएगा। नोट: यह केवल जुड़ने वाली तालिका से रिकॉर्ड्स को हटा देता है, यह posts को नष्ट नहीं करता है (जो समझ में आता है कि यह द्वि-दिशा has_and_belongs_to_many है क्योंकि post को अन्य persons द्वारा संदर्भित किया जा सकता है)।

लेकिन अपने नाम (Person और Post) से अनुमान लगा मुझे लगता है कि आप शायद एक Person has_many :posts और एक Post belongs_to :person जिस स्थिति में आप has_many संघ पर :dependent => :destroy उपयोग कर सकते हैं के साथ भाग प्राप्त कर सकते हैं।

+1

क्या आप कृपया जोड़ सकते हैं कि आप एक ** आश्रित:: नष्ट 'कार्रवाई को ** द्वि-दिशात्मक ** 'has_and_belongs_to_many' रिश्ते पर लागू करेंगे जो ** उसी मॉडल ** से लिंक है? – JJD

+4

मुझे यकीन नहीं है कि सिंटैक्स मूल रूप से इस उत्तर की तरह था, लेकिन मुझे रेल 4 में पता है, यह 'pre_destroy {posts.clear}' – mkralla11

+1

होना चाहिए, धन्यवाद, इसे 'first_destroy' –

1

इस प्रयास करें:

class Person < ActiveRecord::Base 
    has_and_belongs_to_many :posts 
    before_destroy do 
    posts.each { |post| post.destroy } 
    end 
end 

आप रेल के रूप में posts.clear की जरूरत नहीं है 4.2+ यह पहले से ही संभालती है।

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