2016-12-05 6 views
1

モデルのテーブルから列を削除した後、PaperTrailのバージョンを修正しようとするときに問題が発生しています。 private method 'warn' called for nil:NilClassPaperTrailロガーを設定するにはどうすればよいですか?

をして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ロガーをどこでどのように設定すれば、アプリケーションをクラッシュさせるのではなく単に動作をログに記録できるのですか?

答えて

1

2016-12-14現在の回答は、PT 6.0.2にアップグレードすることです。

これはPT 6.0.2で修正された、アンディによるPR https://github.com/airblade/paper_trail/pull/905のおかげで(OP。おかげで、アンディ)

0

私はこれを達成するために2つの方法を考え出しました。 (あなたがより高いものにログレベルを指定したい場合がありますので、明らかにこれは、すべてのモデルに影響を与え初期化子ではActiveRecord ::ベースのロガーを設定することによりPaperTrail::Versionクラス

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

    def logger 
     Logger.new(STDOUT) 
    end 

    end 
end 
)を上書きすることによって

1)デバッグ):

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

これは別の推奨方法があるのですが、これらは私の目的のために今働いているようです。

関連する問題