【发布时间】:2019-05-15 19:37:18
【问题描述】:
我想使用书面记录来跟踪用户更改敏感字段(如密码)的时间。现在这不是带有纸迹的内置选项,因此我希望添加一个近似此行为的自定义适配器。我想在模型中的 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 - 自定义适配器策略是不可行的,还是有办法获取隐藏字段?
【问题讨论】:
标签: ruby-on-rails paper-trail-gem