有没有一种方法可以在针对纸张拖尾宝石的自定义适配器中访问paper_trail_options?

时间:2019-05-15 19:37:19

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

我想使用纸笔迹来跟踪用户何时更改敏感字段(例如密码)。目前,这不是纸张记录的内置选项,因此我希望添加一个近似此行为的自定义适配器。我想向模型中的has_paper_trail添加一个hide选项,类似于ignoreskip,除了更改隐藏字段时仍会创建一个新版本。 object_changes的名称类似于“ password”:[“ modified”],而不是“ password”:[“ password1”,“ password2”]。

我希望使用自定义适配器并修改diff方法。

我从表中删除了“对象”列,以便不会存储敏感信息,并且我将配置设置为使用我的自定义适配器。我正在努力访问自定义适配器中标记为隐藏的字段。

在模型中:

class User < ApplicationRecord
  has_paper_trail hide: [:password]

在自定义适配器中:

  def diff(changes)
    diff_changes = {}
    # How to get this?
    hidden_fields = PaperTrail.record.paper_trail_options[:hide]
    changes.each do |field, value_changes|
      if hidden_fields.contains(field)
        diff_changes[field] = "modified"
      else
        diff_changes[field] = value_changes
      end
    end
    diff_changes
  end

我不知道如何从此处访问paper_trail_options-自定义适配器策略是否不可行,还是有办法获取隐藏字段?

1 个答案:

答案 0 :(得分:0)

您可以将所需的任何内容传递给适配器的构造函数。

PaperTrail.config.object_changes_adapter = MyObjectChangesAdapter.new(
  'User' => { hide: [:password] }
)

或使其为常数。

class MyObjectChangesAdapter
  CONFIG = {
    'User' => { hide: [:password] }
  }

只有一些想法,对此没有约定。 object_changes_adapter仅适用于专家用户。

好问题。很高兴看到人们使用适配器功能。