【问题标题】:PaperTrail how to get the original version - When we have ignored attributesPaperTrail 如何获取原始版本 - 当我们忽略了属性时
【发布时间】:2020-08-18 16:03:16
【问题描述】:

请建议我实现以下目标-

用例:

   class Widget
     # attributes :name, :address
     has_paper_trail ignore: [:name]
   end

第 1 步:Widget.create(name: "test1", address: "address1") 它将创建 Version 1,对象为 nil

第 2 步:当我更新被忽略的字段 widget.update(name: 'test2') 时,它不会创建任何版本

第 3 步:widget.update(address: 'address2') 字段将创建 版本 2

当我使用这个时 - widget.versions.second&.reify || widget 返回widget(name: "test2", address: "address1") not widget(name: "test1", address: "address1")

我想在创建时获得原始版本widget(name: "test1", address: "address1")

提前致谢!

【问题讨论】:

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


    【解决方案1】:

    我知道有人讨论过将 original_version 方法添加到纸质记录中,但我不知道这是否发生了,或者您的应用程序版本是否有。

    你总是可以的

    widget.versions.second&.reify || widget
    

    这将从第一次修改返回到 reify,但如果没有第一次修改,它只会按原样返回小部件(因为没有任何更改)。

    【讨论】:

    • 感谢@steveturczyn 的回复。就我而言。步骤 1 -> 创建小部件 => 版本 1 步骤 2 -> 更新忽略的字段步骤 3 -> 更新字段以创建版本 => 版本 2 当我使用它时 - widget.versions.second&.reify ||小部件 -- 它将转到以前的版本,包含忽略的字段更新但我想在它创建时获取原始版本。
    • 你确定吗?你试过了吗?它应该让你回到原始版本。
    • 它将@steve 但原始版本也包含忽略的字段更改。但我想要第一次创建相同的项目。请查看上面更新的用例。谢谢!
    【解决方案2】:

    好的,这很毛茸茸。我能想到的唯一方法是重写更新方法......

    def update(arguments = {})
      if (arguments.keys - [:name]).present? && !arguments.has_key?(:name)
        arguments[:name] = name.dup
      end
      super(arguments)
    end
    

    这将强制在更新非名称值时记录 :name。

    那你就可以了

    widget.versions.second&.reify || widget
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-11-21
      • 2019-12-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多