Ошибки модели журнала Rails при неудачном сохранении - PullRequest
18 голосов
/ 13 января 2011

Как мне записать в файл ошибки проверки моделей?

Я хочу иметь собственный файл журнала, в котором регистрируются ошибки проверки, когда я играю с приложением в режиме разработки.

Каков наилучший вариант для достижения этой цели?

Является ли исправление обезьяны метода сохранения хорошей идеей? Или у Вас есть какой-нибудь лучший способ сделать это?

Ответы [ 4 ]

26 голосов
/ 13 января 2011

Зависит от того, что вы хотите сделать, но как примерно так:

# model
after_validation :log_errors, :if => Proc.new {|m| m.errors}

def log_errors
  Rails.logger.debug self.errors.full_messages.join("\n")
end
4 голосов
/ 04 октября 2017

Я объединил оба предложения Lenart и Altonymous .Поэтому мы заботимся (начиная с 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
3 голосов
/ 24 августа 2013

Я знаю, что это старо ... но для других. Я создал модуль, который включаю в свои модели.

# 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
1 голос
/ 13 января 2011

Я бы написал обратный вызов before_save и регистрировал бы ошибки, если они действительны? возвращает false.

...