Скажем, у меня есть 2 модели ActiveRecord - Team
и Player
, с простыми отношениями родитель / потомок
class Team < ApplicationRecord
has_many :players
end
class Player < ApplicationRecord
belongs_to :team
end
В Rails предусмотрены такие параметры, как dependent: :destroy
, чтобы указать, что происходит с дочерними ассоциациями когда родитель уничтожен.
Но что, если я не обязательно хочу уничтожить Player
s, когда я destroy
a Team
? Вместо этого я хотел бы сбросить поле team_id
на каждом Player
, а затем безопасно destroy
Team
.
Есть ли для этого наилучший практический подход?
Моя мысль была -
Определить before_destroy
хук Team
, который очищает Player#team_id
у его различных игроков
Определите after_rollback
крючок для Team
, который обрабатывает случай, когда что-то нужно было откатить. Это повторно добавит team_id
ко всем Player
моделям, в основном полностью изменив то, что мы только что сделали
Нужен ли № 2? Или ручка отката обращает вспять то, что я уже сделал? И в целом это лучший способ подойти к этому?
Было бы интересно услышать, если у кого-то есть более простой подход.
Спасибо!