Ошибки модели журнала Rails при неудачном сохранении
Как я могу войти в файл проверки ошибок моделей?
Я хочу иметь собственный файл журнала, в котором регистрируются ошибки проверки, когда я играю в режиме разработки с моим приложением.
Каков наилучший вариант для достижения этой цели?
Является ли исправление обезьяны метода сохранения хорошей идеей? Или у Вас есть какой-нибудь лучший способ сделать это?
4 ответа
Решение
Зависит от того, что вы хотите сделать, но как насчет чего-то вроде этого:
# model
after_validation :log_errors, :if => Proc.new {|m| m.errors}
def log_errors
Rails.logger.debug self.errors.full_messages.join("\n")
end
Я объединил предложения Ленарта и Альтонимуса. Итак, мы заботимся (начиная с 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
Я бы написал callback before_save и регистрировать ошибки, если они действительны? возвращает ложь