2016-12-05 85 views
1

我在從模型表格中刪除一列後試圖使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塊的邏輯樹,這似乎是完全合理的......我很好地記錄了這個與物化繼續前進。

但是,我不明白爲什麼loggernil首先。在哪裏以及如何設置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 

好奇,如果有另一種推薦的方式,但這些似乎目前爲我的目的工作。