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

iva*_*van 1 ruby-on-rails associations ruby-on-rails-3

我有两节课,MasterSlave.该Master班HAS_ONE slaveSlave类属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打电话,它会重新连接它们.这是否表示我正在忽略的回调(其中大师班有很多),或者我只是使用错误的工具来完成工作?

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

Max*_*ams 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
Run Code Online (Sandbox Code Playgroud)