Скажем, у меня есть следующие модели:Рельсы JOIN в зависимости от модели уничтожить
class Campaign < ActiveRecord::Base
has_many :targetings
has_many :devices, :through => :targetings
attr_accessible lalalala, :device_ids
end
class Device < ActiveRecord::Base
has_many :targetings
has_many :campaigns, :through => :targetings
end
class Targetings < ActiveRecord::Base
belongs_to :campaign
belongs_to :targeting
has_many :docs, :dependent => :destroy
end
class Doc < ActiveRecord::Base
belongs_to :targeting
end
Это просто Кампании - Устройства многие-ко-многим ассоциации с присоединиться к модели (Targetings). Таргетинг имеет множество связанных документов, которые я хочу уничтожить при таргетинге на уничтожение.
На странице редактирования есть флажок с именем «campaign [device_ids]», который я использую для выбора устройств для текущей кампании.
Я добавил device_ids
к кампания «s attr_acessible
и Рельсы были в состоянии хоть как-то управлять связью между кампаниями и устройствами: она неявно создает Ориентацию модели.
Однако, когда я удаляю связь между кампанией и устройством, модель таргетинга уничтожается, но документы, связанные с этим таргетингом, не уничтожаются.
Пример:
Devices:
id: 1
title: A
----
id: 2
title: B
Campaigns:
id: 1
title: CA
Targetings:
id: 1
device_id: 1
campaign_id: 1
Docs:
id: 1
content: lalala
targeting_id: 1
Это начальное состояние. Когда я прошу: POST campaign/1/update
, с device_ids = [2]
у меня будет
Targetings:
id: 2
device_id: 2
campaign_id: 1
, но все еще
Docs:
id: 1
content: lalala
targeting_id: 1
Итак, Targetings [ID = 1] был удален, но зависимые Docs не были удалены.
Ожидаемое поведение? Должен ли я вручную обновлять ассоциации? Если да, то каков правильный способ сделать это?
P.S. Таргетинг всегда должен создаваться неявно.
Я не знаю, что это будет работать, но вы пробовали 'has_many кампании: targetings,: зависимый => : destroy'? Интересно, являются ли записи таблицы объединений по умолчанию 'deleted', а не' destroy', которые пропускают обратные вызовы (например, уничтожают другие зависимые записи). – gregates
@gregates, к сожалению, это не повлияло: зависимые документы все еще не затронуты.Похоже, причина в том, что где-то в режиме управления рельсами. Я попробую переопределить метод device_ids = и вручную управлять связью. –