2011-01-13 9 views
15

Come posso accedere agli errori di convalida dei file dei modelli?Errori del modello di log delle porte in caso di salvataggio non riuscito

Desidero disporre di un file di registro personalizzato, in cui vengono registrati gli errori di convalida quando utilizzo la modalità di sviluppo con la mia applicazione.

Qual è l'opzione migliore per raggiungere questo obiettivo?

Il patch di salvataggio del metodo di salvataggio è una buona idea? O hai un modo migliore per farlo?

risposta

1

Scriverei una richiamata before_save e registrare gli errori se validi? restituisce falso.

21

Dipende da cosa si vuole fare, ma come su qualcosa di simile:

# 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

Questo è molto utile .. 1 –

+0

Questo è grande! Grazie! –

2

So che questo è vecchio ... ma per gli altri. Ho creato un modulo che includo nei miei modelli.

# 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

ho combinato entrambi Lenart e Altonymous suggerimenti. Così facciamo una preoccupazione (dal 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 

e cambiare i nostri modelli per lo includono

# app/models/my_model.rb 
class MyModel < ApplicationRecord 
    include LogValidationErrors 
    # ... 
end 
Problemi correlati