【问题标题】:Keeping track of destroyed objects跟踪被破坏的对象
【发布时间】:2012-08-07 10:37:06
【问题描述】:

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

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

在我的数据库中是否有可以执行此操作的 gem,或者是否需要处理此操作?

【问题讨论】:

  • 如果您不介意保留记录,您可以使用 paranoia gem,它会添加 deleted_at 时间戳并使用它来限定模型,因此删除的记录是默认排除:github.com/radar/paranoia.
  • 谢谢,我觉得这个方法最适合我。
  • 在这种情况下,我会添加这个作为答案:)

标签: ruby-on-rails events destroy


【解决方案1】:

应该使用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 gem。

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

Account.deleted_after_time(time)

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

【讨论】:

  • 是否可以获取到一定时间后被销毁的所有账号id?
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 2010-12-25
    • 2018-02-26
    • 1970-01-01
    • 2020-11-17
    • 1970-01-01
    • 1970-01-01
    • 2015-02-14
    • 2020-08-19
    • 1970-01-01
    相关资源
    最近更新 更多