2009-09-09 119 views
47

顯然依賴=>在使用:through選項時忽略destroy。dependent =>通過「has_many through」關聯銷燬

所以我有這個...

class Comment < ActiveRecord::Base 
    has_many :comment_users, :dependent => :destroy 
    has_many :users, :through => :comment_users 
    ... 
end 

...但刪除評論不會導致相關comment_user記錄越來越刪除。

什麼是推薦的方法,然後,級聯刪除時使用:通過?

謝謝

回答

96

顯然:依賴不被忽略!

真正的問題是,我打電話給Comment.delete(id)直接進入數據庫,而我現在使用Comment.destroy(id)加載Comment對象並調用destroy()。這拿起:dependent => :destroy,一切都很好。

+0

的確!我有一個類似的問題,除了我在使用'dependent::destroy'的時候出現外鍵錯誤。問題是我使用'obj.delete'而不是'obj.destroy',所以依賴者沒有被刪除,因此完整性錯誤。 – 2017-11-07 18:02:36

11

原始海報的解決方案是有效的,但我想指出,這隻適用於如果你有該表的id列。我更喜歡我的多對多表只能是兩個外鍵,但我必須從遷移表定義中刪除我的「id:false」,以便級聯刪除才能正常工作。擁有這個功能絕對勝過了桌子上沒有ID列。

+0

謝謝!我花了半天時間試圖自己弄清楚。 – Tintin81 2013-10-27 16:38:26

+2

你真實的mvp – jed 2015-07-13 21:55:37

5

如果你有一個多態關聯,你應該做的@blogofsongs說,但有foreign_key屬性,像這樣:

class User < ActiveRecord::Base 
    has_many :activities , dependent: :destroy, foreign_key: :trackable_id 
end 
相關問題