class Post < ActiveRecord::Base
has_many :posts_tags
has_many :tags, through: :posts_tags
end
class PostsTag < ActiveRecord::Base
belongs_to :post
belongs_to :tag
end
class Tag < ActiveRecord::Base
has_many :posts_tags
has_many :posts, through: :posts_tags
end
जब पोस्ट नष्ट हो जाता है, तो मैं अपने सभी संगठनों को टैग को भी हटा देना चाहता हूं। मैं पोस्टटाग मॉडल पर चलाने के लिए सत्यापन नहीं चाहता हूं। मैं बस हटाना चाहता हूँ।has_many को हटाने का सही तरीका: रिकॉर्ड में शामिल होने के माध्यम से?
मुझे पता चला है कि पोस्ट मॉडल कार्यों के पोस्ट टैग के संबंध में रिश्ते पर एक निर्भरता जोड़ना चाहता है जैसा कि मैं चाहता हूं: has_many :posts_tags, dependent: :delete_all
।
हालांकि, इस विषय पर प्रलेखन सुझाव देता है कि मुझे इसके बजाय ऐसा करना चाहिए: has_many :tags, through: :posts_tags, dependent: :delete_all
। जब मैं ऐसा करता हूं, टैग ऑब्जेक्ट नष्ट हो जाता है और जॉइन ऑब्जेक्ट बनी हुई है।
http://api.rubyonrails.org/classes/ActiveRecord/Associations/ClassMethods.html#method-i-has_many
has_many के लिए, को नष्ट हमेशा रिकॉर्ड (रों) इतना है कि कॉलबैक चलाए जा रहे हैं हटाए जाने की विधि को नष्ट कॉल करेंगे। हालांकि हटाएं या तो निर्भर विकल्प द्वारा निर्दिष्ट रणनीति के अनुसार हटाना होगा: या यदि नहीं: आश्रित विकल्प दिया गया है, तो यह डिफ़ॉल्ट रणनीति का पालन करेगा। डिफ़ॉल्ट रणनीति है: nullify (nil को विदेशी कुंजी सेट करें), has_many को छोड़कर: जहां डिफ़ॉल्ट रणनीति delete_all है (शामिल कॉल रिकॉर्ड हटाएं, उनके कॉलबैक चलाने के बिना)।
- मैं डिफ़ॉल्ट रणनीति वास्तव में इस्तेमाल किया कैसे हो सकती है? अगर मैं छोड़ देता हूं: पूरी तरह से निर्भर, किसी भी रिकॉर्ड को हटाया नहीं जाता है। और मैं सिर्फ संकेत नहीं दे सकता: एक has_many रिश्ते पर निर्भर है। रेल वापस आते हैं और कहते हैं, ": आश्रित विकल्प या तो उम्मीद करता है: नष्ट करें, हटाएं_all,: nullify या: प्रतिबंधित ({})"।
- अगर मैं निर्दिष्ट नहीं करते हैं: रिश्तों में से किसी पर निर्भर है, यह PostsTag वस्तु पर post_id को रद्द नहीं करता है के रूप में यह
शायद मैं यह गलत और दृष्टिकोण है कि मैंने पाया पढ़ रहा हूँ सुझाव है कि लगता है काम सही तरीका है?
यदि एकाधिक पोस्ट द्वारा टैग का उपयोग किया जाता है तो क्या होता है? यदि एक पोस्ट हटा दी जाती है, तो अन्य पोस्ट प्रभावित होंगे। –
सत्य, और टैग में 'has_many होना चाहिए: पदों के माध्यम से:: posts_tags' पोस्ट नहीं, मैं post_tany को हटाने के लिए' has_many: posts_tags, निर्भर:: नष्ट 'का उपयोग करता हूं और टैग को अकेले छोड़ देता हूं। आप एक रेक कार्य या कंसोल के साथ अनाथ टैग हटा सकते हैं। – rmagnum2002
एसोसिएशन फिक्स्ड, धन्यवाद। मैं सिर्फ दस्तावेज़ीकरण को समझने की कोशिश कर रहा हूं।शब्द उलझन में है – Brian