Подтвердить что ты не робот

Depend => destroy в ассоциации has_many через

По-видимому, зависимый = > destroy игнорируется при использовании опции: through.

Итак, у меня есть это...

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

... но удаление комментария не приводит к удалению связанных записей comment_user.

Каков рекомендуемый подход для удаления каскада при использовании: через?

Спасибо

4b9b3361

Ответ 1

По-видимому: зависимый не игнорируется!

Реальная проблема заключалась в том, что я вызывал Comment.delete(id), который идет прямо к db, тогда как теперь я использую Comment.destroy(id), который загружает объект Comment и вызывает destroy() на нем. Это поднимает :dependent => :destroy, и все хорошо.

Ответ 2

Исходное плакатное решение действительно, однако я хотел бы указать, что это работает только если у вас есть столбец идентификатора для этой таблицы. Я предпочитаю, чтобы мои таблицы "многие ко многим" были только двумя внешними ключами, но мне пришлось удалить "id: false" из определения таблицы миграции для каскадного удаления для работы. Наличие этой функции определенно перевешивает отсутствие столбца идентификатора в таблице.

Ответ 3

Если у вас есть полиморфная ассоциация, вы должны сделать то, что сказал @blogofsongs, но с атрибутом foreign_key, например:

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