跟踪被破坏的物体

时间:2012-08-07 10:37:06

标签: ruby-on-rails events destroy

我搜索堆栈溢出的类似方法并没有找到任何东西,所以这里是我的问题:

我需要能够跟踪对象上是否发生了破坏及其发生的时间。 我也不需要整个对象只是它的id。

是否存在执行此操作的gem或是否需要在我的数据库中处理此问题?

2 个答案:

答案 0 :(得分:4)

应该使用observer pattern

您需要创建一个观察模型的模型:

class AuditObserver < ActiveRecord::Observer
  observe :account

  def after_destroy(account)
    p "#{account.id} destroyed"
  end
end

此处AuditObserver会观察Account模型,并在帐户被销毁时打印出来。

请注意,您需要将观察者添加到您的配置(config/appplication.rb)中:

config.active_record.observers = :audit_observer

更新

如果您希望在一段时间内拥有被破坏的物体,可以使用rails3_acts_as_paranoid宝石。

然后,您可以将删除的帐户提取为:

Account.deleted_after_time(time)

或者您可以创建一个新模型(Audit),然后可以将带有时间戳的已销毁的ID插入该表中。

答案 1 :(得分:1)

如果你不介意保留记录,你可以使用paranoia gem,它会添加deleted_at时间戳并使用它来限定模型的范围,这样删除的记录就是默认排除。