【发布时间】:2020-05-04 15:54:09
【问题描述】:
假设我有 2 个 ActiveRecord 模型 - Team 和 Player,具有简单的父/子关系
class Team < ApplicationRecord
has_many :players
end
class Player < ApplicationRecord
belongs_to :team
end
Rails 提供dependent: :destroy 之类的选项来指定当父级被销毁时子级关联会发生什么。
但是,如果我在 destroy 和 Team 时不一定要破坏 Players 怎么办?相反,我想取消设置每个 Player 上的 team_id 字段,然后安全地取消设置 destroy Team。
是否有最佳实践方法来做到这一点?
我的想法是——
在
Team上定义一个before_destroy钩子,以清除它的各种玩家上的Player#team_id在
Team上定义一个after_rollback挂钩,以处理必须回滚某些内容的情况。这会将team_id重新添加到所有Player模型中,基本上与我们刚才所做的相反
#2 有必要吗?还是回滚处理逆转我已经做过的事情?总的来说,这是解决这个问题的最佳方法吗?
很想知道是否有人有更简单的方法。
谢谢!
【问题讨论】:
标签: ruby-on-rails postgresql activerecord model callback