【问题标题】:Correct way to unset dependent associations before destroying a record?在销毁记录之前取消设置依赖关联的正确方法?
【发布时间】:2020-05-04 15:54:09
【问题描述】:

假设我有 2 个 ActiveRecord 模型 - TeamPlayer,具有简单的父/子关系

class Team < ApplicationRecord
  has_many :players
end

class Player < ApplicationRecord
  belongs_to :team
end

Rails 提供dependent: :destroy 之类的选项来指定当父级被销毁时子级关联会发生什么。

但是,如果我在 destroyTeam 时不一定要破坏 Players 怎么办?相反,我想取消设置每个 Player 上的 team_id 字段,然后安全地取消设置 destroy Team

是否有最佳实践方法来做到这一点?

我的想法是——

  1. Team 上定义一个before_destroy 钩子,以清除它的各种玩家上的Player#team_id

  2. Team 上定义一个after_rollback 挂钩,以处理必须回滚某些内容的情况。这会将team_id重新添加到所有Player 模型中,基本上与我们刚才所做的相反

#2 有必要吗?还是回滚处理逆转我已经做过的事情?总的来说,这是解决这个问题的最佳方法吗?

很想知道是否有人有更简单的方法。

谢谢!

【问题讨论】:

    标签: ruby-on-rails postgresql activerecord model callback


    【解决方案1】:
    class Team < ApplicationRecord
      has_many :players, dependent: :nullify
    end
    
    class Player < ApplicationRecord
      belongs_to :team, optional: true
    end
    

    options for the dependent option

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-11-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-06-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多