Rails 4属于/ has_many关系 - 删除关联的属性但保留关联的记录

时间:2015-12-18 18:54:36

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

我有两个模型如下:交易和奖品。

交易,

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到零)?

2 个答案:

答案 0 :(得分:3)

您可以使用dependent: nullify

答案 1 :(得分:2)

  1. 删除dependent: :destroy

  2. 创建并after_destroy回调,将所有关联的prize_id中的所有deals字段设置为nil。

    after_destroy do self.deals.update_all(prize_id: nil) end

  3. 注意: 启动Rails 5,任何具有belongs_to关联的模型都不允许拥有nil外键。