2009-05-07 27 views
6

şey ... Benim modelinde bu varActiveRecord: ilişkili kayıtları Ben alamıyorum

silme:

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 

Ve bunu da deneyin:

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

Ama Bu, DB'den kayıtları silmez. yerine bunu yapmak yaşıyorum:

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

... iyi yolu olamaz hangi.
Peki, en iyi yol nedir, lütfen?

cevap

4

Garry haklı: model.options.clear

Ama sizin ihtiyaçlarınıza uygun olmadığını ileri gidip bir modeli geri arama ilişkilendirebilirsiniz

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 

Veya DB tetikleyicileri ekleyerek veritabanından FK ilişkilerini zorlamak için this plugin'u kullanabilirsiniz. onları uygun şekilde).

O maight yardım umut Rails 3'te

+0

Meraklı ilgilenir, varsa before_destroy geri arama gereklidir: bağımlı => : seçeneği yerinde yok et? –

+0

Hayır. Raylar 3 değil. –

1

yapmanız gereken tüm :dependent => :destroy ve ActiveRecord dinlenme