2009-05-07 16 views
6

कुछ ऐसा जो मुझे नहीं मिल रहा है ...ActiveRecord: संबद्ध रिकॉर्ड को हटाने

मैं अपने मॉडल में इस है:

class Model < ActiveRecord::Base 
    has_many :model_options # a link table for many to many 
    has_many :options, 
      :through => :model_options, 
      :dependent => :destroy, 
      :foreign_key => 'model_id' 
end 

और मैं यह करने के लिए प्रयास करें:

model = Model.find(id) 
model.options.delete # also tried model.options.delete_all 

लेकिन यह डीबी से रिकॉर्ड हटा नहीं रहा है। इसके बजाय मैं यह करने के आ रही है:

model.options.each do |option| 
    option.delete 
end 

... जो सबसे अच्छा तरीका नहीं हो सकता।
तो कृपया सबसे अच्छा तरीका क्या है?

उत्तर

4

गैरी सही है: model.options.clear

लेकिन आप आगे जाकर एक मॉडल कॉलबैक से संबद्ध करने से, अगर यह अपनी आवश्यकताओं फिट बैठता है

class Model < ActiveRecord::Base 
has_many :model_options # a link table for many to many 
has_many :options, 
     :through => :model_options, 
     :dependent => :destroy, 
     :foreign_key => 'model_id' 

# Clear options records before destroy 
before_destroy :clear_options 

protected 
    def clear_options 
    options.clear 
    end 
end 

या आप डेटाबेस से एफके रिश्तों को लागू करने के लिए this plugin का उपयोग कर सकते हैं डीबी ट्रिगर जोड़ना (यदि आपका विशेष डीबी स्वाद supp उन्हें Ortsi) appropiately।

मुझे आशा है कि maight मदद आप

+0

जिज्ञासु का ख्याल रखेंगे, अगर आपके पास before_destroy कॉलबैक आवश्यक है: निर्भर => जगह में विकल्प नष्ट? –

+0

नहीं। यह रेल 3 शुरू नहीं कर रहा है। –

1

रेल 3 में तुम सब करने की है :dependent => :destroy है और ActiveRecord बाकी

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