2012-11-29 62 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