2009-09-09 108 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