假设,我有以下模型:
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
这是简单的活动-设备与加入模型(定位)的多对多关联。Targeting有许多相关的文档,我想在目标销毁时将其销毁。
在编辑页面上,有一个名为“ campaign[device_ids] ”的复选框集,我用它来选择当前广告系列的设备。
我已经添加device_ids
到Campaign中attr_acessible
,Rails 能够以某种方式管理Campaigns和Devices之间的关联:它隐式地创建了Targeting模型。
但是,当我删除 Campaign 和 Device 之间的关联时,Targeting 模型被破坏,但与该 Targeting 关联的 Docs 不会被破坏。
例子:
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 没有被删除。
这是预期的行为吗?我应该手动更新关联吗?如果是这样,正确的方法是什么?
PS定位应始终隐式创建。