2009-04-19 17 views
9

Düzenli bir has_many ile, üst kayıt silindiğinde ilişkilendirmeleri silmek için :dependent => :destroy seçeneği vardır. has_many :through ile, çocuk kayıtlarıyla ilişkili başka ebeveynler olabilir, bu nedenle :dependent => :destroy'un hiçbir etkisi yoktur.Son has_many'dan sonra ilişkilendirmeleri yok edin: kayıt silinir

Son HMT derneklerinden alındıktan sonra çocuk kayıtlarının silinmesini nasıl sağlıyorsunuz?

cevap

12

buldum çözümü bu gibi bir after_destroy geri arama gibi görünüyor:

katılmak modeli üzerinde
class Parent < ActiveRecord::Base 
    has_many :children, :through => :parentage 
    after_destroy :destroy_orphaned_children 

    private 

    def destroy_orphaned_children 
    children.each do |child| 
     child.destroy if child.parents.empty? 
    end 
    end 

end 
+0

tahrip ve doktor has_many hastalar olsa bir kez bir hastayı yok etmek istiyorsanız, bir 'has_many vardı: through' Derneği'ne; Modelde 'yok et' dedim, ancak derneğin öteki tarafındaki herhangi bir modeli yok etmek istedim. Bu kodu benim modelimin içine yerleştirdim ve sonunda yok edilen model sadece bir "belongs_to" olduğundan, her aramayı sildim. Doğru yönde itiş için teşekkürler. –

3

kullanmak örneğin

": modeli, bağımlı: belongs_to yok", onların doktor eski soru/cevap içine karıştırmak için randevuları

Class Appointment 
    belongs_to :doctor 
    belongs_to :patient, dependent: :destroy 

Class Doctor 
    has_many :appointments, dependent: :destroy 
    has_many :patients, through: :appointments 

Class Patient 
    has_many :appointments 
    has_many :doctors, through: :appointments 
+2

Tüm hastaları imha etme fikrini seviyorum :)) –

+0

Sadece bir randevusu yok edildiğinde hastayı imha etmek istiyorum. En az bir randevu kaldığı sürece, hastanın hayatta kalmasını istiyorum (aksi takdirde gelmeyecek ve ödeme yapmayacaktır :-) Randevuların hiçbiri yok edildiğinde yaklaşımınız buna uygun mu yoksa hastayı yok edecek mi? – silverdr

İlgili konular