2011-11-07 79 views
1

我有大约15个或更少的复杂模型。我想跟踪这些变化。最简单的方法是什么?后保存/更新触发器?将日志更改为数据库

性能是很重要的,但如果有低复杂性,但降低性能的方式,我会做到这一点。

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

谢谢你,菲利普

回答

0

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" 
+0

绝对有趣......虽然我担心的复杂性,可能会影响性能和维护......在大规模应用 – Philip

+0

好吧,我已经看到了vestal_versions,这是相当快,非常实用。 –

0

你也可能想看看的ActiveRecord开箱Dirty objects。这使您可以在保存过程中处理对象,以便将更改记录到单独的表中。

+0

是的,但这是AR 3+ – Philip

+0

2.x中也存在脏物。请参阅[此链接](http://api.rubyonrails.org/v2.3.8/classes/ActiveRecord/Dirty.html)。我的理解是他们的工作与他们在AR 3+中的工作非常相似。 – Koby