dependent => destroy on a “has_many through” association

本秂侑毒 提交于 2019-12-17 17:38:40

问题


Apparently dependent => destroy is ignored when also using the :through option.

So I have this...

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

...but deleting a Comment does not result in the associated comment_user records getting deleted.

What's the recommended approach, then, for cascade deletes when using :through?

Thanks


回答1:


Apparently :dependent is not ignored!

The real issue was that I was calling Comment.delete(id) which goes straight to the db, whereas I now use Comment.destroy(id) which loads the Comment object and calls destroy() on it. This picks up the :dependent => :destroy and all is well.




回答2:


The original poster's solution is valid, however I wanted to point out that this only works if you have an id column for that table. I prefer my many-to-many tables to only be the two foreign keys, but I had to remove my "id: false" from the migration table definition for cascading delete to work. Having this functionality definitely outweighs not having an id column on the table.




回答3:


If you have a polymorphic association, you should do what @blogofsongs said but with a foreign_key attribute like so:

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


来源:https://stackoverflow.com/questions/1399394/dependent-destroy-on-a-has-many-through-association

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!