habtm отношения не поддерживает: зависимый вариант


Верно ли, что отношения HABTM не поддерживают опцию :dependent?

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

Я пробую рельсы края.

3 24

3 ответа:

Да, это не поддерживает его. смотрите документы . Обычно 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. Примечание: это только удаляет записи из таблицы join, но не уничтожает posts (что имеет смысл, если это двунаправленный has_and_belongs_to_many, потому что на post могут ссылаться другие persons).

Но угадывая по вашим именам (Person и Post), я бы предположил, что вам, вероятно, сойдет с рук Person has_many :posts и Post belongs_to :person в этом случае вы можете использовать :dependent => :destroy в ассоциации has_many.

Попробуйте это:

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

Вам не нужны сообщения.ясно, как рельсы 4.2+ обрабатывает это уже.