Правда ли, что отношения HABTM не поддерживают вариант :dependent
?
class Person < ActiveRecord::Base
has_and_belongs_to_many :posts, :dependent => :destroy
end
Я пробую край рельсов.
Правда ли, что отношения HABTM не поддерживают вариант :dependent
?
class Person < ActiveRecord::Base
has_and_belongs_to_many :posts, :dependent => :destroy
end
Я пробую край рельсов.
Ага, не поддерживает. см. документацию. Обычно habtm
предназначен только для очень-очень простых случаев, и если вам нужны более сложные вещи, вам следует переключиться на has_many :through
.
Если вы хотите сохранить простую ассоциацию has_and_belongs_to_many
, вы можете добавить это:
class Person < ActiveRecord::Base
has_and_belongs_to_many :posts
before_destroy { posts.clear }
end
Что очистит таблицу соединений от всех записей этого person
. Примечание. Это только удаляет записи из таблицы соединения, но не уничтожает posts
(что имеет смысл, если это двунаправленное has_and_belongs_to_many
, поскольку на post
может ссылаться другой persons
).
Но, судя по вашим именам (Person
и Post
), я бы предположил, что вам, вероятно, сойдет с рук Person has_many :posts
и Post belongs_to :person
, и в этом случае вы можете использовать :dependent => :destroy
в ассоциации has_many
.
dependent: :destroy
для двунаправленного отношения has_and_belongs_to_many
, которое ссылается на одну и ту же модель?
- person JJD; 01.02.2013
before_destroy { posts.clear }
- person mkralla11; 25.07.2013
after_destroy do User.find(:all, :uniq => true, :joins => :posts, :conditions => 'posts.id is NULL').each(&:destroy) end
, но также можете использовать has_many в этот момент.
- person Xitcod13; 15.03.2014
before_destroy { posts.clear }
в rails 4.2.0 (postgresql). Rails удаляет отношение по умолчанию (он не удаляет связанную запись, публикацию в этом примере).
- person Fatih; 10.02.2015
Попробуй это:
class Person < ActiveRecord::Base
has_and_belongs_to_many :posts
before_destroy do
posts.each { |post| post.destroy }
end
end
Вам не нужно post.clear, так как Rails 4.2+ уже обрабатывает это.
Deleting from associations
, особенно в частиWhat gets deleted?
. Это помогло мне понять, почему и что происходит за api.rubyonrails. .org/classes/ActiveRecord/Associations/ - person lucasarruda   schedule 25.07.2018