rails delete has_one:通过关联

时间:2012-03-01 12:43:44

标签: ruby-on-rails ruby-on-rails-3 activerecord

我有以下数据关系:

model A has_one B, :through => C
model A has_one C, :dependent => :destroy

model B has_many C, :dependent => :destroy
model B has_many A, :through => C

model C belongs_to A
model C belongs_to B

假设我有对象a(类型A)和对象b(类型B)和a.b = b, 我想删除该关联。

我目前正在做的是b.as.delete(@a),它从C表中删除了行,但是ab保持有效,即使我尝试做ab = nil它仍然保持有效的旧值

我刚刚发现只有在我通过a.b = b添加关联时才会发生 如果我通过做b.as<<来添加它a,删除时一切正常。

我做错了什么?

更新 - 如果我执行a.reload,值也会更新为nil,在我创建与a.b = b的关联的情况下,我不想使用reload来获取正确的值。 为什么它只发生在这种情况下,而不是在b.as<<案件?

1 个答案:

答案 0 :(得分:1)

活动记录delete方法仅删除您引用的对象的行,并且不尊重您的:dependent => :destroy关系。

你想要做的是改用destroy方法,这也将通过你定义的方式宣传毁灭。