2012-05-16 68 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