Вопрос

Очевидно, что dependent => destroy игнорируется при использовании опции :through .

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

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

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

Тогда каков рекомендуемый подход к каскадному удалению при использовании :through?

Спасибо

Это было полезно?

Решение

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

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

Другие советы

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

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

class User < ActiveRecord::Base
  has_many :activities , dependent: :destroy, foreign_key: :trackable_id
end
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top