Мое желаемое поведение заключается в том, что когда уничтожение вызывается для экземпляра, этот экземпляр фактически не будет уничтожен, а будет просто помечен как уничтоженный.Это необходимо для любых ассоциаций моделей.
В моделях, которые я не хочу на самом деле уничтожать, но просто пометьте их как удаленные, у меня есть поле deactivated
.
Отчто я могу сказать, destroy_without_callbacks (так делает ActsAsParanoid), однако этот метод больше не существует в 3.0.0, плюс я не рад переопределению приватных методов.
Я также пытался реализовать обратные вызовы, но согласно документам любые изменения, внесенные в обратные вызовы, являются частью транзакции и поэтому также откатываются.
Мой обратный вызов выглядит следующим образом:
after_destroy :mark_deactivated
def mark_deactivated
if self.respond_to?(:deactivated) then
self.deactivated = DateTime.now
self.save
false
else
true
end
end
Как я могу предотвратить фактическое уничтожение моей записи, не останавливая обратный вызов и не отменяя мои изменения?