2012-11-14 78 views
1

說我有:模型X和模型Y每個has_many Z,:dependent =>:destroy。如果我摧毀X,Z是否會被摧毀?

class X < ActiveRecord::Base 
    has_many :z, :dependent => :destroy 
end 

class Y < ActiveRecord::Base 
    has_many :z, :dependent => :destroy 
end 

class Z < ActiveRecord::Base 
    belongs_to :x 
    belongs_to :y 
end 

...然後我:

x.destroy 

是否z被摧毀,如果它也屬於y

我知道測試非常簡單,如果我沒有得到任何答案,我會回答自己的問題,但除了正確的答案之外,我還有興趣更好地瞭解:依賴性= >:銷燬作品,如果有任何其他含義,我需要注意。 ActiveRecord :: Base文檔在這個主題上相當稀少。

回答

2

它肯定會銷燬連接的所有z對象,並且這會在數據庫上造成很多業務錯誤。

恕我直言,我會重構這種建模。處理這種關係可能會非常糟糕。你有沒有理由不能改造?

也許,如果只是改變驗證可以工作,或者甚至使X和Y繼承一些與X類關係的ohter類。

1

我還沒有測試過它,但我認爲z會被銷燬,無論它與y有關。

至於含義...... :destroy將首先實例化每個z的實例並調用:destroy就可以了。如果由於z上的驗證/掛鉤而失敗,那麼原始的x將無法​​銷燬。

此外,如果x有成千上萬的z's它可能需要一些時間,此時:delete_all可能會更好。