我有两个模型如下:交易和奖品。
交易,
belongs_to :prize, :foreign_key => 'prize_id'
奖
has_many :deals, dependent: :destroy
我的问题很简单:
如果我删除了一个奖品,我想保留与之关联的交易,但删除与刚刚删除的此prize_id相关联的交易对象内的prize_id值。
今天,当使用dependent:destroy时,它会删除整行,即整个记录。
我尝试删除了依赖:: destroy',但是当我删除奖品时,它会删除奖品,但它会在Deal的prized_id列中输入id号码删除的奖品,这是一个问题。
如何删除奖品,然后让关联的记录(相关的交易对象)保持/保持存在,并且只在交易表中更改prize_id(从有问题的prize_id到零)?
答案 0 :(得分:3)
您可以使用dependent: nullify
答案 1 :(得分:2)
删除dependent: :destroy
创建并after_destroy
回调,将所有关联的prize_id
中的所有deals
字段设置为nil。
after_destroy do
self.deals.update_all(prize_id: nil)
end
注意:强>
启动Rails 5,任何具有belongs_to
关联的模型都不允许拥有nil
外键。