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.
Каков рекомендуемый подход для удаления каскада при использовании: через?
Спасибо
Ответы
Ответ 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