dependent =>在"has_many through"关联上销毁

blo*_*ngs 48 activerecord ruby-on-rails has-many-through

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

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

class Comment < ActiveRecord::Base
  has_many :comment_users, :dependent => :destroy
  has_many :users, :through => :comment_users
  ...
end
Run Code Online (Sandbox Code Playgroud)

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

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

谢谢

blo*_*ngs 96

显然:依赖不被忽视!

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


dro*_*sis 11

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

  • 你真正的mvp (2认同)

riz*_*oro 5

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

class User < ActiveRecord::Base
  has_many :activities , dependent: :destroy, foreign_key: :trackable_id
end
Run Code Online (Sandbox Code Playgroud)