如何设置PaperTrail记录仪?

时间:2016-12-05 18:16:20

标签: paper-trail-gem

在从模型表中删除列后尝试重新启动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记录器,以便我们只记录行为而不是崩溃应用程序?

2 个答案:

答案 0 :(得分:1)

截至2016-12-14,答案是升级到PT 6.0.2。

这已在PT 6.0.2中修复,感谢Andy的PR https://github.com/airblade/paper_trail/pull/905(OP。谢谢,Andy)

答案 1 :(得分: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

如果有另一种推荐的方式,我很好奇,但这些方法目前似乎适用于我的目的。