Rails 3覆盖销毁而不取消回调,并触发ROLLBACK

时间:2010-10-30 18:38:07

标签: ruby-on-rails activerecord ruby-on-rails-3 before-filter

我希望的行为是,当在一个实例上调用destroy时,该实例实际上不会被销毁,但它只会被标记为已被销毁。这需要渗透任何模型关联。

在我不想实际销毁的模型中,只是将它们标记为已删除,我有一个deactivated字段。

从我能说的< v3.0.0这样做的方法是覆盖destroy_without_callbacks(这就是ActsAsParanoid的方式),但是3.0.0中不再存在该方法,而且我对重写私有方法并不感到兴奋。

我也尝试过实现回调,但根据docs,回调中的任何更改都是事务的一部分,因此也会回滚。

我的回调如下:

  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 :(得分:0)