2011-01-13 13 views
15

어떻게 파일의 유효성 검사 오류에 로그 할 수 있습니까?레일스 로그 모델 오류가 발생했을 때 저장 실패

내 응용 프로그램과 함께 개발 모드에서 재생할 때 유효성 검사 오류가 기록되는 사용자 지정 로그 파일이 필요합니다.

이를 달성하는 가장 좋은 방법은 무엇입니까?

저장 방법의 원숭이 패치가 좋은 생각입니까? 아니면 할 수있는 좋은 방법이 있습니까?

답변

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

를 포함

# 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 

(레일 4 이후) 우려을 변경! 고맙습니다! –

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/my_model.rb 
class MyModel < ApplicationRecord 
    include LogValidationErrors 
    # ... 
end 
관련 문제