我有两个班级,Master
和Slave
。 Master
班级has_one slave
,Slave
班级属于master
。
鉴于两个关联对象master_a
和slave_a
(其中slave_a
属于master_a
),如何在不从数据库中销毁slave_a
的情况下取消链接?我基本上需要“释放”slave_a
。我尝试过master_a.slave.delete
,它会从数据库中销毁slave_a
。
我也尝试了master_a.slave.update_attribute(:master_id, nil)
,但下次调用master_a.save
时,它会重新链接它们。这是否表示我正在忽略的回调(其中大师班有很多),或者我只是使用错误的工具来完成工作?
编辑:我应该指定,我不想销毁任何一个对象,只需要销毁这两个特定实例之间的链接。此外,真正的模型实际上并不称为主模型和奴隶模型,这只是我正在使用的一个说明性示例。
答案 0 :(得分:6)
这是因为master
和slave
对象在内存中的保存方式。即使您已经更新了从站,主站仍然认为从站与之关联,因为关联的从站对象仍然保留在内存中(这通常更有效)。重新加载主服务器时,关联将消失。所以,如果你在控制台中这样做,你会发现这样的事情:
master = Master.find(123)
=> <master object>
master.slave.update_attribute(:master_id, nil)
=> true
master.slave
=> <slave object>
master.reload
OR
master = Master.find(123)
master.slave
=> nil