销毁记录之前取消关联依赖关系的正确方法?

问题描述 投票:0回答:1

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

class Team < ApplicationRecord
  has_many :players
end

class Player < ApplicationRecord
  belongs_to :team
end

Rails提供了类似dependent: :destroy的选项,用于指定在销毁父级时子级关联会发生什么。

但是,当我Playerdestroy时我不一定要销毁Team怎么办?相反,我想取消设置每个team_idPlayer字段,然后安全地destroy设置Team

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

我的想法是-

  1. before_destroy上定义一个Team钩子,以清除其各个播放器上的Player#team_id

  2. after_rollback上定义一个Team钩子,该钩子处理必须回退某些内容的情况。这会将team_id的[[re-add应用于所有Player模型,基本上颠倒了我们刚才所做的工作]]

  3. #2是否必要?还是回滚处理可以逆转我已经做的事情?总的来说,这是解决此问题的最佳方法吗?

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

谢谢!

说我有2个ActiveRecord模型-Team和Player,具有简单的父/子关系类Team

class Team < ApplicationRecord has_many :players, dependent: :nullify end class Player < ApplicationRecord belongs_to :team, optional: true end
请参见options for the dependent option
ruby-on-rails postgresql activerecord model callback
1个回答
0
投票
class Team < ApplicationRecord has_many :players, dependent: :nullify end class Player < ApplicationRecord belongs_to :team, optional: true end
© www.soinside.com 2019 - 2024. All rights reserved.