Я хотел бы использовать след бумаги, чтобы отслеживать, когда пользователи изменяют чувствительное поле, например пароль.Сейчас это не встроенный вариант с отслеживанием бумаги, поэтому я надеялся добавить специальный адаптер, который приближает это поведение.Я хотел бы добавить параметр hide
к has_paper_trail в модели, аналогично ignore
и skip
, за исключением случаев, когда скрытое поле изменяется, новая версия все еще создается.object_changes
будет иметь что-то вроде «пароль»: [«измененный»] вместо «пароль»: [«пароль1», «пароль2»].
Я надеялся сделать это с помощью специального адаптера иизменение метода diff
.
Я удалил столбец 'object' из таблицы, чтобы конфиденциальная информация не сохранялась, и я настроил конфигурацию для использования моего специального адаптера.Я пытаюсь получить доступ к полям, помеченным как скрытые от пользовательского адаптера.
В модели:
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 отсюда - стратегия нестандартного адаптера просто нежизнеспособна или есть способ, которым я могу получить скрытые поля?