【问题标题】:Rails PaperTrail versioningRails PaperTrail 版本控制
【发布时间】:2012-11-29 21:23:56
【问题描述】:

我正在使用 Paper Trail gem 对我的模型之一进行版本化。

它工作得很好,我在它记录版本时进行了改进,以便它只跟踪批准产品的更新,这部分工作正常。

我还需要做的是捕获批准的版本。自然,在批准时,我的已批准字段设置为 false,因此它不会捕获版本。有谁知道我如何修改下面我的产品模型中的行来实现这一点?

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

编辑:似乎 papertrail 不适用于自定义控制器操作。谁能验证一下?

【问题讨论】:

    标签: ruby-on-rails ruby ruby-on-rails-3 paper-trail-gem


    【解决方案1】:

    正如您在paper_trail/has_paper_trail.rb#L65 中看到的,它仅适用于create, update, destroy 这三个默认事件。一种可能的解决方法是在您的 approve 方法中触发 update 事件,您可能已经在这样做了。

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

    【讨论】:

    • 我知道这可能不是最佳做法,但我的批准是在我的控制器内使用@product.approved = true @product.save 处理的。但是,我认为 @product.save 应该触发更新是否正确?
    • 是的,它应该触发 - 我猜 label_approvedp.approved 在您的代码中实际上是相同的?否则这可能无法按预期工作
    • 啊,是一样的!现在在上面编辑。批准操作确实正确更新了批准的字段,但我猜 has_paper_trail 正在处理 before_update 而不是 after,如果它在进行更改之前记录版本是有道理的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-22
    • 2016-03-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-14
    相关资源
    最近更新 更多