54

在使用 :through 选项时,显然依赖 => destroy 会被忽略。

所以我有这个...

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

...但删除评论不会导致关联的 comment_user 记录被删除。

那么,对于使用 :through 时的级联删除,推荐的方法是什么?

谢谢

4

3 回答 3

101

显然 :dependent 不会被忽略!

真正的问题是我调用Comment.delete(id)的是直接进入数据库的方法,而我现在使用Comment.destroy(id)的是加载 Comment 对象并在其上调用 destroy() 的方法。这捡起来了:dependent => :destroy,一切都很好。

于 2009-09-09T13:28:33.377 回答
12

原始海报的解决方案是有效的,但是我想指出,这仅在您有该表的 id 列时才有效。我更喜欢我的多对多表只是两个外键,但我必须从迁移表定义中删除我的“id:false”,以便级联删除工作。拥有此功能绝对胜过在表上没有 id 列。

于 2013-04-27T16:59:23.727 回答
7

如果你有一个多态关联,你应该按照@blogofsongs 所说的那样做,但使用 foreign_key 属性,如下所示:

class User < ActiveRecord::Base
  has_many :activities , dependent: :destroy, foreign_key: :trackable_id
end
于 2014-06-12T10:19:19.740 回答