2011-01-13 18 views
15

Modellerin dosya doğrulama hatalarına nasıl giriş yapabilirim?Raylar, model hatalarını kaydedemedi kaydedildi

Uygulamam ile geliştirme modunda oynatıldığında doğrulama hatalarının kaydedildiği özel bir günlük dosyasına sahip olmak istiyorum.

Bunu başarmak için en iyi seçenek hangisidir?

Maymun düzeltme yönteminin düzeltme eki iyi bir fikir midir? Yoksa bunu yapmanın daha iyi bir yolu var mı?

cevap

1

Bir before_save geri arama yazar ve geçerliyse hataları günlüğe kaydederdim? false değerini döndürür.

21

sen ne yapmak istediğinize bağlıdır ama böyle bir şey hakkında nasıl:

# 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

Bu çok yararlıdır .. 1 –

+0

içerecek şekilde

# 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 

(Raylar 4 beri) bir endişe yapmak ve değiştirmek! Teşekkür ederim! –

2

bildiğim bu eski ... ama diğerleri için. Modellerime dahil ettiğim bir modül oluşturdum.

# 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

Ben Lenart ve Altonymous önerilerin her ikisi kombine ettik. Bu yüzden bizim modellerimiz bu harika it

# app/models/my_model.rb 
class MyModel < ApplicationRecord 
    include LogValidationErrors 
    # ... 
end 
İlgili konular