2009-09-09 13 views
47

पर "has_many through" पर नष्ट करें स्पष्ट रूप से निर्भर => विकल्प के माध्यम से: का उपयोग करते समय नष्ट कर दिया जाता है।आश्रित => एसोसिएशन

तो मैं इस है ...

class Comment < ActiveRecord::Base 
    has_many :comment_users, :dependent => :destroy 
    has_many :users, :through => :comment_users 
    ... 
end 

... लेकिन एक टिप्पणी को हटाने जुड़े comment_user रिकॉर्ड भी नहीं होती नष्ट कर दिया हो रही है।

कैस्केड के उपयोग के दौरान अनुशंसित दृष्टिकोण क्या है: के माध्यम से?

धन्यवाद

उत्तर

96

जाहिर है: निर्भर नजरअंदाज नहीं कर रहा है!

असली मुद्दा यह था कि मैं Comment.delete(id) पर कॉल कर रहा था जो सीधे डीबी पर जाता है, जबकि अब मैं Comment.destroy(id) का उपयोग करता हूं जो टिप्पणी वस्तु को लोड करता है और कॉल को नष्ट करता है। यह :dependent => :destroy उठाता है और सब ठीक है।

+0

दरअसल! मुझे एक समान समस्या थी, सिवाय इसके कि मुझे विदेशी कुंजी त्रुटियां मिल रही थीं, भले ही मैं 'आश्रित:: नष्ट' का उपयोग कर रहा था। समस्या यह थी कि मैं 'obj.dderoy' के बजाय 'obj.delete' का उपयोग कर रहा था, इसलिए आश्रितों को हटाया नहीं जा रहा था, इस प्रकार अखंडता त्रुटि। –

11

मूल पोस्टर का समाधान मान्य है, हालांकि मैं यह इंगित करना चाहता था कि यह केवल तभी काम करता है जब आपके पास उस तालिका के लिए आईडी कॉलम हो। मैं केवल दो विदेशी कुंजी होने के लिए कई से अधिक टेबल पसंद करता हूं, लेकिन मुझे काम करने के लिए कैस्केडिंग के लिए माइग्रेशन टेबल परिभाषा से अपना "आईडी: झूठा" निकालना पड़ा। इस कार्यक्षमता को निश्चित रूप से तालिका में एक आईडी कॉलम नहीं होने से अधिक है।

+0

धन्यवाद! मैंने बस अपने आप से बाहर निकलने की कोशिश कर आधा दिन बिताया। – Tintin81

+2

आप दा असली एमवीपी – jed

5

आप एक बहुरूपी संघ है, तो आप तो जैसे क्या कहा @blogofsongs लेकिन एक foreign_key विशेषता के साथ क्या करना चाहिए:

class User < ActiveRecord::Base 
    has_many :activities , dependent: :destroy, foreign_key: :trackable_id 
end 
संबंधित मुद्दे