Как сохранить объект активной записи, когда его ассоциация была удалена?
У меня есть модель под названием 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