Rails 3 Override Destroy без отмены обратных вызовов и запуска ROLLBACK - PullRequest
0 голосов
/ 30 октября 2010

Мое желаемое поведение заключается в том, что когда уничтожение вызывается для экземпляра, этот экземпляр фактически не будет уничтожен, а будет просто помечен как уничтоженный.Это необходимо для любых ассоциаций моделей.

В моделях, которые я не хочу на самом деле уничтожать, но просто пометьте их как удаленные, у меня есть поле 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

Как я могу предотвратить фактическое уничтожение моей записи, не останавливая обратный вызов и не отменяя мои изменения?

1 Ответ

0 голосов
/ 04 апреля 2011

Проверьте этот драгоценный камень: https://github.com/wireframe/delete_paranoid

...