2011-01-13 27 views
15

Làm cách nào tôi có thể đăng nhập vào lỗi xác thực tệp của mô hình?Lỗi mô hình nhật ký đường ray khi lưu không thành công

Tôi muốn có tệp nhật ký tùy chỉnh, trong đó lỗi xác thực được ghi lại khi tôi phát trong chế độ phát triển với ứng dụng của mình.

Tùy chọn tốt nhất để đạt được điều đó là gì?

Có phải ý tưởng hay của phương pháp lưu khỉ không? Hoặc có bạn một số cách tốt hơn để làm điều đó?

Trả lời

1

Tôi sẽ viết một cuộc gọi lại trước khi_save và ghi lại các lỗi nếu hợp lệ? trả về false.

21

Phụ thuộc vào những gì bạn muốn làm nhưng làm thế nào về một cái gì đó như thế này:

# 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

này là rất hữu ích .. 1 –

+0

này là rất tốt! Cảm ơn bạn! –

2

Tôi biết điều này là cũ ... nhưng đối với những người khác. Tôi đã tạo một mô-đun mà tôi đưa vào các mô hình của mình.

# 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

tôi đã kết hợp cả hai LenartAltonymous gợi ý. Vì vậy, chúng tôi làm cho một mối quan tâm (vì 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 

và thay đổi mô hình của chúng tôi bao gồm nó

# app/models/my_model.rb 
class MyModel < ApplicationRecord 
    include LogValidationErrors 
    # ... 
end 
Các vấn đề liên quan