dependent =>在“has_many through”协会上摧毁

时间:2009-09-09 12:27:37

标签: ruby-on-rails activerecord has-many-through

显然依赖=>当使用:through选项时,将忽略destroy。

所以我有这个......

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

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

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

由于

3 个答案:

答案 0 :(得分:96)

显然:依赖不被忽视!

真正的问题是我正在调用Comment.delete(id)直接进入数据库,而我现在使用Comment.destroy(id)加载Comment对象并在其上调用destroy()。这会获得:dependent => :destroy,一切都很顺利。

答案 1 :(得分:11)

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

答案 2 :(得分:5)

如果你有一个多态关联,你应该做@blogofsongs所说的但是有一个foreign_key属性,如下所示:

class User < ActiveRecord::Base
  has_many :activities , dependent: :destroy, foreign_key: :trackable_id
end