2011-01-13 21 views
15

¿Cómo puedo iniciar sesión en un archivo de errores de validación de modelos?Error de modelo de registro de rieles en error

Quiero tener un archivo de registro personalizado, donde los errores de validación se registran cuando juego en modo de desarrollo con mi aplicación.

¿Cuál es la mejor opción para lograr eso?

¿Es una buena idea el parche mono del método save? ¿O tienes alguna forma mejor de hacer eso?

Respuesta

1

¿Escribiría una devolución de llamada before_save y registraría los errores si es válido? devuelve falso.

21

depende de lo que desea hacer pero ¿qué tal algo como esto:

# 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

Esto es muy útil .. 1 –

+0

Esto es grande! ¡Gracias! –

2

Sé que esto es viejo ... pero para otros. Creé un módulo que incluyo en mis modelos.

# 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

He combinado los dos Lenart y Altonymous sugerencias. Así que hacemos una preocupación (ya que los carriles 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 

y cambiamos nuestros modelos a lo incluyen

# app/models/my_model.rb 
class MyModel < ApplicationRecord 
    include LogValidationErrors 
    # ... 
end 
Cuestiones relacionadas