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.
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.
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
.
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.
dependent: :destroy
action on a bi-directional has_and_belongs_to_many
relationship which links to the same model? –
Tog before_destroy { posts.clear }
–
Toomay after_destroy do User.find(:all, :uniq => true, :joins => :posts, :conditions => 'posts.id is NULL').each(&:destroy) end
but might as well use has_many through at that point. –
Marche before_destroy { posts.clear }
in rails 4.2.0 (postgresql). Rails deletes relationship by default (it doesn't delete related record, post in this example). –
Erato 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
.
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.
© 2022 - 2024 — McMap. All rights reserved.
Deleting from associations
, specially in the partWhat gets deleted?
. That made me understand why and what's happening behind api.rubyonrails.org/classes/ActiveRecord/Associations/… – Floozy