2012-05-16 124 views
0

这样做的原因后的历史得到的反馈是否有一个“Rails的路”做什么我尝试的。我这样做的方式似乎有点笨重,容易出现人为错误。的Rails 3 after_save的跟踪更新

我有我想要存储包括时间的历史和日期的记录被更新多个表。谁更新并不重要。

目前,我已经将以下内容放在一起[尚未测试,一些语法可能是错误的],但似乎其他人会有这种需求,并且会有更好的方法来做到这一点,是一种在数据库级别实现这一点的方法,或者我不知道的其他内置方法/回调。

生成的模型CreateDdiPlanHistorical包括updated_at:datetime在create_history方法下面看到的其他字段的顶部,我的理解是应该自动填充历史表中的任何记录被添加或修改。

(验证和协会剥离出来的清晰度)

class CallDdiPlan < ActiveRecord::Base 
    attr_accessible :active, :ddi_count, :plan_name, :price 

    after_save :create_history 

    private 

    def create_history 
     CallDdiPlanHistorical.create({:active => this.active, :ddi_count => this.ddi_count, :plan_name => this.plan_name, :price => this.price, :call_ddi_plan_id => this.id}) 
    end 

end 
+0

你需要每一个更新的历史或者只是最近的一个? –

+0

每次更新。这将用于生成历史结算报告,所以我需要知道价格何时发生变化以及它们始终处于何种状态。 – bdx

回答

0

你可以做某种滚你自己的解决方案,但如果你真的想要让老板高兴,使用审计宝石:

https://github.com/collectiveidea/audited 
+0

我看起来就是这样,滚动自己是最后的手段,我想[主要是为了生产懒惰]认为DRY主体也适用于有免费的宝石可以满足我需要的地方。谢谢马克。 – bdx