【发布时间】:2011-06-08 09:49:08
【问题描述】:
如何将模型的验证错误记录到文件中?
我想要一个自定义日志文件,当我在开发模式下使用我的应用程序玩游戏时会记录验证错误。
实现这一目标的最佳选择是什么?
save 方法的猴子补丁是个好主意吗?或者你有什么更好的方法吗?
【问题讨论】:
标签: ruby-on-rails validation activerecord logging
如何将模型的验证错误记录到文件中?
我想要一个自定义日志文件,当我在开发模式下使用我的应用程序玩游戏时会记录验证错误。
实现这一目标的最佳选择是什么?
save 方法的猴子补丁是个好主意吗?或者你有什么更好的方法吗?
【问题讨论】:
标签: ruby-on-rails validation activerecord logging
我结合了 Lenart 和 Altonymous 建议。所以我们提出了一个问题(从 Rails 4 开始)
# 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
并更改我们的模型以包含它
# app/models/my_model.rb
class MyModel < ApplicationRecord
include LogValidationErrors
# ...
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
【讨论】:
取决于你想做什么,但这样的事情怎么样:
# model
after_validation :log_errors, :if => Proc.new {|m| m.errors}
def log_errors
Rails.logger.debug self.errors.full_messages.join("\n")
end
【讨论】:
我会写一个 before_save 回调并记录错误(如果有效)?返回 false。
【讨论】: