我搜索堆栈溢出的类似方法并没有找到任何东西,所以这里是我的问题:
我需要能够跟踪对象上是否发生了破坏及其发生的时间。 我也不需要整个对象只是它的id。
是否存在执行此操作的gem或是否需要在我的数据库中处理此问题?
答案 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
时间戳并使用它来限定模型的范围,这样删除的记录就是默认排除。