2010-02-04 5 views
14

Model A:Jak mogę usunąć obiekty potomne, gdy rodzic jest usuwany w szynach?

has_many :b, :dependent => :delete_all 

Model B:

belongs_to :a 
belongs_to :c 

Model C:

has_many :b 

Kiedy usunąć a, chciałbym również mieć dzieci b's usunięte tak, że zostać usuniętym z dowolnego c's, który może się do nich odwoływać. Jednak powyższe nie działa. Byłbym wdzięczny za każdą pomoc.

+1

Duplikat: http://stackoverflow.com/questions/331394/can-i-set-up-cascade-deleting-in-rails – hobodave

Odpowiedz

32

tak:

class Widgets < ActiveRecord::Base 
    has_many :whatevers, :dependent => :destroy 
end 

Aktualizacja

Twój ostatni komentarz wskazuje używasz metody delete(), aby usuwać swoich obiektów. To nie będzie używać wywołań zwrotnych. Proszę przeczytać the manual, aby poznać szczegóły.

+0

Nie mogę zrozumieć, dlaczego to nie działa. Kiedy usuwam "a", które odwołuje się do "b", i że "b" jest również wymienione w "c", "b" jest nadal dzieckiem "c" po skasowaniu "a", używając powyżej. – James

+0

James, musiałbyś mieć: dependent =>: destroy dla wszystkich obiektów w łańcuchu. –

+0

hmmm ... działa, gdy wywołuję destru na rodzica, ale nie działa, gdy wywołuję delete. Czy to jest oczekiwane? – James

Powiązane problemy