在销毁记录之前取消设置相关关联的正确方法?
Correct way to unset dependent associations before destroying a record?
假设我有 2 个 ActiveRecord 模型 - Team
和 Player
,具有简单的 parent/child 关系
class Team < ApplicationRecord
has_many :players
end
class Player < ApplicationRecord
belongs_to :team
end
Rails 提供类似 dependent: :destroy
的选项来指定当父级被销毁时子关联会发生什么。
但是,如果我在 destroy
一个 Team
时不一定要销毁 Player
怎么办?相反,我想取消每个 Player
上的 team_id
字段,然后安全地 destroy
Team
.
是否有最佳实践方法?
我的想法是 -
在 Team
上定义一个 before_destroy
挂钩,清除 Player#team_id
上的各种玩家
在 Team
上定义一个 after_rollback
钩子来处理必须回滚的情况。这将 重新添加 team_id
到所有 Player
模型,基本上颠倒了我们刚刚所做的
#2 有必要吗?还是回滚处理逆转我已经做过的事情?总的来说,这是解决这个问题的最佳方式吗?
很想知道是否有人有更简单的方法。
谢谢!
class Team < ApplicationRecord
has_many :players, dependent: :nullify
end
class Player < ApplicationRecord
belongs_to :team, optional: true
end
假设我有 2 个 ActiveRecord 模型 - Team
和 Player
,具有简单的 parent/child 关系
class Team < ApplicationRecord
has_many :players
end
class Player < ApplicationRecord
belongs_to :team
end
Rails 提供类似 dependent: :destroy
的选项来指定当父级被销毁时子关联会发生什么。
但是,如果我在 destroy
一个 Team
时不一定要销毁 Player
怎么办?相反,我想取消每个 Player
上的 team_id
字段,然后安全地 destroy
Team
.
是否有最佳实践方法?
我的想法是 -
在
Team
上定义一个before_destroy
挂钩,清除Player#team_id
上的各种玩家在
Team
上定义一个after_rollback
钩子来处理必须回滚的情况。这将 重新添加team_id
到所有Player
模型,基本上颠倒了我们刚刚所做的
#2 有必要吗?还是回滚处理逆转我已经做过的事情?总的来说,这是解决这个问题的最佳方式吗?
很想知道是否有人有更简单的方法。
谢谢!
class Team < ApplicationRecord
has_many :players, dependent: :nullify
end
class Player < ApplicationRecord
belongs_to :team, optional: true
end