Rails 3 has_one association:取消关联对象而不破坏它?

时间:2014-05-06 15:47:05

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

我有两个班级,MasterSlaveMaster班级has_one slaveSlave班级属于master

鉴于两个关联对象master_aslave_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时,它会重新链接它们。这是否表示我正在忽略的回调(其中大师班有很多),或者我只是使用错误的工具来完成工作?

编辑:我应该指定,我不想销毁任何一个对象,只需要销毁这两个特定实例之间的链接。此外,真正的模型实际上并不称为主模型和奴隶模型,这只是我正在使用的一个说明性示例。

1 个答案:

答案 0 :(得分:6)

这是因为masterslave对象在内存中的保存方式。即使您已经更新了从站,主站仍然认为从站与之关联,因为关联的从站对象仍然保留在内存中(这通常更有效)。重新加载主服务器时,关联将消失。所以,如果你在控制台中这样做,你会发现这样的事情:

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