我想使用纸笔迹来跟踪用户何时更改敏感字段(例如密码)。目前,这不是纸张记录的内置选项,因此我希望添加一个近似此行为的自定义适配器。我想向模型中的has_paper_trail添加一个hide
选项,类似于ignore
和skip
,除了更改隐藏字段时仍会创建一个新版本。 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-自定义适配器策略是否不可行,还是有办法获取隐藏字段?
答案 0 :(得分:0)
您可以将所需的任何内容传递给适配器的构造函数。
PaperTrail.config.object_changes_adapter = MyObjectChangesAdapter.new(
'User' => { hide: [:password] }
)
或使其为常数。
class MyObjectChangesAdapter
CONFIG = {
'User' => { hide: [:password] }
}
只有一些想法,对此没有约定。 object_changes_adapter
仅适用于专家用户。
好问题。很高兴看到人们使用适配器功能。