3

我在堆栈溢出中搜索了类似的方法,但没有找到任何东西,所以我的问题是:

我需要能够跟踪一个对象是否发生了破坏以及它发生的时间。我也并不真正需要整个对象,只需要它的 id。

是否有一个宝石可以做到这一点,或者它需要在我的数据库中处理这个?

4

2 回答 2

4

应该使用观察者模式。

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

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 gem。

然后您可以获取已删除的帐户:

Account.deleted_after_time(time)

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

于 2012-08-07T10:41:16.123 回答
1

如果您不介意保留记录,您可以使用paranoia gem,它会添加deleted_at时间戳并使用它限定模型的范围,因此默认情况下会排除已删除的记录。

于 2012-08-07T11:31:58.563 回答