2011-01-13 14 views
15

モデルのファイル検証エラーにどのようにログできますか?Railsログのモデルエラーが保存に失敗しました

アプリケーションで開発モードで再生すると、検証エラーが記録されるカスタムログファイルが必要です。

これを達成するための最良の選択肢は何ですか?

保存方法の猿のパッチは良いアイデアですか?または、あなたにそれを行うためのより良い方法をお持ちですか?

答えて

1

私はbefore_saveコールバックを書き、有効な場合はエラーをログに記録しますか? falseを返します。

21

は、あなたが何をしたいのかに依存するが、どのようにこのような何か:

# model 
after_validation :log_errors, :if => Proc.new {|m| m.errors} 

def log_errors 
    Rails.logger.debug self.errors.full_messages.join("\n") 
end 
+0

を含めるように私たちのモデルを変更... 1 –

+0

これは素晴らしいです!ありがとうございました! –

2

私は、これは古いです知っている...しかし、他の人のために。自分のモデルに含めるモジュールを作成しました。

# validation_logger.rb 
module ValidationLogger 
    def self.included(base) 
    base.send :include, InstanceMethods 

    base.after_validation :log_errors, if: ->(m) { m.errors.present? } 
    end 

    module InstanceMethods 
    def log_errors 
     Rails.logger.warn "#{self.class.name} #{self.id || '(new)'} is invalid: #{self.errors.full_messages.inspect}" 
    end 
    end 
end 
0

私はLenartAltonymous提案の両方を組み合わせました。だから我々は

# app/models/concerns/log_validation_errors.rb 
module LogValidationErrors 
    extend ActiveSupport::Concern 

    included do 
    after_validation :log_errors, if: proc { |m| m.errors } 
    end 

    def log_errors 
    Rails.logger.debug "Validation failed!\n" + errors.full_messages.map { |i| " - #{i}" }.join("\n") 
    end 
end 

(Railsの4以降)の懸念を作成し、これは非常に有用であることに

# app/models/my_model.rb 
class MyModel < ApplicationRecord 
    include LogValidationErrors 
    # ... 
end 
関連する問題