2012-11-29 61 views
0

我正在使用Paper Tram gem來創建我的模型之一版本。Rails Paper Trail版本號

它的工作原理非常好,當它在日誌版本上進行改進以便跟蹤已批准產品的更新時,這部分工作正常。

我還需要做的是捕獲批准的版本。自然,在批准時,我的批准字段設置爲false,因此它不會捕獲版本。有誰知道我可以如何修改下面的產品模型中的線來實現這一目標?

has_paper_trail :on => [:update,:approve], :if => Proc.new { |p| p.approved == true } 

編輯:它似乎papertrail不自定義控制器操作。任何人都可以驗證嗎?

回答

0

正如你可以在paper_trail/has_paper_trail.rb#L65中看到的,它只適用於三個默認事件create, update, destroy。可能的解決方法是在您的approve方法中觸發update事件,您可能已經在這樣做。

# in your model 
def approve! 
    self.approved = true 
    save 
end 
+0

我知道這可能不是最佳做法,但我的批准是在我的控制器內用'@product.approved = true @ product.save'處理的。然而,我是否認爲'@ product.save'應該開始更新? – Raoot

+0

邑,它應該激發 - 我猜'label_approved'和'p.approved'在你的代碼中實際上是一樣的嗎?否則,這可能無法按預期工作 – krichard

+0

啊,是的同一件事!現在編輯上面。批准操作確實正確地更新了批准的字段,但我猜測has_paper_trail正在處理before_update而不是之後,這對於在更改前記錄版本是有意義的。 – Raoot