【问题标题】:Is there a way to access paper_trail_options in a custom adapter for paper trail gem?有没有办法在纸迹宝石的自定义适配器中访问 paper_trail_options ?
【发布时间】:2019-05-15 19:37:18
【问题描述】:

我想使用书面记录来跟踪用户更改敏感字段(如密码)的时间。现在这不是带有纸迹的内置选项,因此我希望添加一个近似此行为的自定义适配器。我想在模型中的 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 - 自定义适配器策略是不可行的,还是有办法获取隐藏字段?

【问题讨论】:

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


    【解决方案1】:

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

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

    或者让它成为一个常数。

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

    只是一些想法,对此没有约定。 object_changes_adapter 是专供专家用户使用的功能。

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

    【讨论】:

      猜你喜欢
      • 2012-06-06
      • 2020-03-12
      • 2012-10-03
      • 1970-01-01
      • 2012-02-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多