【问题标题】:Log changes to Database记录对数据库的更改
【发布时间】:2011-11-07 16:23:41
【问题描述】:

我有大约 15 个或多或少复杂的模型。其中我想跟踪这些变化。最简单的方法是什么?保存后/更新触发器?

性能很重要,但如果有一种方法复杂度低但性能下降,我会这样做。

顺便说一句:我不想使用存储过程。 (虽然我可能会,如果有一个非常简单的方法来做到这一点......)

谢谢,菲利普

【问题讨论】:

    标签: mysql ruby-on-rails activerecord ruby-on-rails-2


    【解决方案1】:

    verstal_versions,好像在做你想做的事。

    它为您指定的所有模型添加了版本控制。参见,例如:

    class User < ActiveRecord::Base
      versioned
    
      validates_presence_of :name
    end
    

    然后您可以像这样使用模型的版本:

    >> u = User.create(:name => "Steve Richert")
    => #<User first_name: "Steve", last_name: "Richert">
    >> u.version
    => 1
    >> u.update_attribute(:name, "Stephen Richert")
    => true
    >> u.name
    => "Stephen Richert"
    >> u.version
    => 2
    >> u.revert_to(10.seconds.ago)
    => 1
    >> u.name
    => "Steve Richert"
    

    【讨论】:

    • 确实很有趣...虽然我担心可能会影响性能和维护的复杂性...
    • 嗯,我在大型应用中看到了vestal_versions,它的速度非常快,而且非常好用。
    【解决方案2】:

    您可能还想查看 ActiveRecord 提供的开箱即用的Dirty objects。这使您能够在对象处于保存过程中时对其进行处理,以便您可以将更改记录到单独的表中。

    【讨论】:

    • 2.x 中也存在脏对象。见this link。我的理解是它们的工作方式与 AR 3+ 中的工作方式几乎相同。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多