我在堆栈溢出中搜索了类似的方法,但没有找到任何东西,所以我的问题是:
我需要能够跟踪一个对象是否发生了破坏以及它发生的时间。我也并不真正需要整个对象,只需要它的 id。
是否有一个宝石可以做到这一点,或者它需要在我的数据库中处理这个?
我在堆栈溢出中搜索了类似的方法,但没有找到任何东西,所以我的问题是:
我需要能够跟踪一个对象是否发生了破坏以及它发生的时间。我也并不真正需要整个对象,只需要它的 id。
是否有一个宝石可以做到这一点,或者它需要在我的数据库中处理这个?
应该使用观察者模式。
您需要创建一个模型来观察您的模型:
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 插入该表中。
如果您不介意保留记录,您可以使用paranoia gem,它会添加deleted_at
时间戳并使用它限定模型的范围,因此默认情况下会排除已删除的记录。