Как сохранить объект активной записи, когда его ассоциация была удалена?

У меня есть модель под названием Company вместе со многими ассоциациями, и у этой ассоциации есть еще много. (с зависимым уничтожением)

com = Company.find_by(name: 'ABC')

Затем я уничтожаю запись

Company.find_by(name: 'ABC').destroy

Сейчас 'comимеет запись, и когда я выполняю com.save объект не сохраняется вместе с его ассоциацией.

Примечание. Я пытаюсь отладить, где мой запрос уничтожения требует времени (у него сотни ассоциаций), поэтому я не хочу терять данные, я хочу сохранить их в консоли после отладки.

1 ответ

Решение

Наилучшим подходом было бы, так или иначе, обернуть действие в транзакцию базы данных. Затем вы можете откатить транзакцию, чтобы восстановить все данные в исходное состояние.

Чтобы написать это явно, вы можете сделать что-то вроде:

ActiveRecord::Base.transaction do
  Company.find_by(name: 'ABC').destroy
  # Any debugging can be done here, or above
  raise ActiveRecord::Rollback
end

Фактически, rails на самом деле предоставляет инструмент отладки именно для этого варианта использования: вы можете внести любые изменения в базу данных и откатить все (внутри транзакции, как описано выше), выполнив:

rails console --sandbox
Другие вопросы по тегам