Как настроить регистратор PaperTrail?

Я столкнулся с проблемой при попытке переформулировать версии PaperTrail после удаления столбца из таблицы модели.

Трассировка стека начинается: private method 'warn' called for nil:NilClass

и указывает мне на следующие строки внутри метода reify:

# Set all the attributes in this version on the model.
attrs.each do |k, v|
  if model.has_attribute?(k)
    model[k.to_sym] = v
  elsif model.respond_to?("#{k}=")
    model.send("#{k}=", v)
  else
    logger.warn "Attribute #{k} does not exist on #{item_type} (Version id: #{id})."
  end
end

Поскольку я удалил столбец из таблицы, я приземлился в блоке else логического дерева, что кажется вполне разумным... Я в порядке, записывая это, продолжая с овеществлением.

Однако я вообще не понимаю, почему logger это nil. Где и как настроить логгер PaperTrail, чтобы мы просто регистрировали поведение, а не сбой приложения?


person Andy Weiss    schedule 05.12.2016    source источник


Ответы (2)


По состоянию на 14 декабря 2016 г. ответ заключается в обновлении до PT 6.0.2.

Это было исправлено в PT 6.0.2 благодаря PR https://github.com/airblade/paper_trail/pull/905 от Энди (ОП. Спасибо, Энди)

person Jared Beck    schedule 27.12.2016

Я придумал два способа сделать это.

1) Путем перезаписи класса PaperTrail::Version

module PaperTrail
  class Version < ActiveRecord::Base
    include PaperTrail::VersionConcern

    def logger
      Logger.new(STDOUT)
    end

  end
end

2) Установив логгер ActiveRecord::Base в инициализаторе (очевидно, это влияет на все модели, поэтому вы можете указать уровень лога выше, чем отладка):

ActiveRecord::Base.logger = Logger.new(STDOUT)
ActiveRecord::Base.logger.level = Logger::INFO

Любопытно, есть ли другой рекомендуемый способ, но пока они работают для моих целей.

person Andy Weiss    schedule 05.12.2016