habtm relationship does not support :dependent option

谁说我不能喝 提交于 2019-11-27 12:54:48

问题


Is it true that HABTM relationships do not support the :dependent option?

class Person < ActiveRecord::Base
  has_and_belongs_to_many :posts, :dependent => :destroy
end

I am trying rails edge.


回答1:


Yep, It doesn't support it. See the docs. Generally habtm is meant only for very very simple cases and if you start needing more complex things you should switch to has_many :through.




回答2:


If you want to keep to the simple has_and_belongs_to_many association, you could add this:

class Person < ActiveRecord::Base
  has_and_belongs_to_many :posts
  before_destroy { posts.clear }
end

Which will clear the join table of all entries of that person. Note: This only removes records from the join table, it does not destroy the posts (which makes sense if it is a bi-direction has_and_belongs_to_many because the post might be referenced by other persons).

But guessing from your names (Person and Post) I would assume that you can probably get away with a Person has_many :posts and a Post belongs_to :person in which case you can use the :dependent => :destroy on the has_many association.




回答3:


Try this:

class Person < ActiveRecord::Base
  has_and_belongs_to_many :posts
  before_destroy do
    posts.each { |post| post.destroy }
  end
end

You don't need to posts.clear as Rails 4.2+ handles this already.



来源:https://stackoverflow.com/questions/2799746/habtm-relationship-does-not-support-dependent-option

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