2016-12-05 4 views
1

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

начинается StackTrace: 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, чтобы мы просто регистрировали поведение, а не разбивали приложение?

ответ

0

Я выяснил два способа добиться этого.

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 

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

Смежные вопросы