モデルのファイル検証エラーにどのようにログできますか?Railsログのモデルエラーが保存に失敗しました
アプリケーションで開発モードで再生すると、検証エラーが記録されるカスタムログファイルが必要です。
これを達成するための最良の選択肢は何ですか?
保存方法の猿のパッチは良いアイデアですか?または、あなたにそれを行うためのより良い方法をお持ちですか?
モデルのファイル検証エラーにどのようにログできますか?Railsログのモデルエラーが保存に失敗しました
アプリケーションで開発モードで再生すると、検証エラーが記録されるカスタムログファイルが必要です。
これを達成するための最良の選択肢は何ですか?
保存方法の猿のパッチは良いアイデアですか?または、あなたにそれを行うためのより良い方法をお持ちですか?
私はbefore_saveコールバックを書き、有効な場合はエラーをログに記録しますか? falseを返します。
は、あなたが何をしたいのかに依存するが、どのようにこのような何か:
# model
after_validation :log_errors, :if => Proc.new {|m| m.errors}
def log_errors
Rails.logger.debug self.errors.full_messages.join("\n")
end
私は、これは古いです知っている...しかし、他の人のために。自分のモデルに含めるモジュールを作成しました。
# 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
私はLenartとAltonymous提案の両方を組み合わせました。だから我々は
# 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
を含めるように私たちのモデルを変更... 1 –
これは素晴らしいです!ありがとうございました! –