Есть ли способ получить доступ к paper_trail_options в пользовательском адаптере для драгоценного камня? - PullRequest
1 голос
/ 15 мая 2019

Я хотел бы использовать след бумаги, чтобы отслеживать, когда пользователи изменяют чувствительное поле, например пароль.Сейчас это не встроенный вариант с отслеживанием бумаги, поэтому я надеялся добавить специальный адаптер, который приближает это поведение.Я хотел бы добавить параметр 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 отсюда - стратегия нестандартного адаптера просто нежизнеспособна или есть способ, которым я могу получить скрытые поля?

1 Ответ

0 голосов
/ 19 июня 2019

Вы можете передать все, что хотите, конструктору вашего адаптера.

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

Или сделать его константой.

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

Просто некоторые идеи, для этого нет соглашения.object_changes_adapter - это функция только для опытных пользователей.

Хороший вопрос.Приятно видеть людей, использующих функцию адаптера.

...