Циркулярная зависимость:: уничтожить в ActiveRecord возможно?

Безопасно ли иметь круговой dependent: :destroy варианты в моделях ActiveRecord?

class Student < ActiveRecord::Base
  has_one :user, dependent: :destroy
end
class User < ActiveRecord::Base
  belongs_to :student, dependent: :destroy
end

Если я удалю user, следует удалить связанный student, И наоборот.

1 ответ

Да. AR просто выдаст запросы на удаление для каждого объекта в пределах одной транзакции. Итак, допустим, у пользователя 2 ученика (а и б). Если вы удаляете ученика a, AR удалит ученика a, вызывая удаление пользователя, вызывая удаление ученика b, вызывая окончательное дублирование пользователя. Удаление дубликатов (кроме небольшого снижения производительности) не приведет к возникновению каких-либо ошибок. И наоборот, удаление пользователя также будет работать нормально.

Другие вопросы по тегам