【问题标题】:Rails log model errors on failed saveRails 在保存失败时记录模型错误
【发布时间】:2011-06-08 09:49:08
【问题描述】:

如何将模型的验证错误记录到文件中?

我想要一个自定义日志文件,当我在开发模式下使用我的应用程序玩游戏时会记录验证错误。

实现这一目标的最佳选择是什么?

save 方法的猴子补丁是个好主意吗?或者你有什么更好的方法吗?

【问题讨论】:

    标签: ruby-on-rails validation activerecord logging


    【解决方案1】:

    我结合了 LenartAltonymous 建议。所以我们提出了一个问题(从 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
    

    【讨论】:

      【解决方案2】:

      我知道这是旧的......但对其他人来说。我创建了一个包含在模型中的模块。

      # 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
      

      【讨论】:

        【解决方案3】:

        取决于你想做什么,但这样的事情怎么样:

        # model
        after_validation :log_errors, :if => Proc.new {|m| m.errors}
        
        def log_errors
          Rails.logger.debug self.errors.full_messages.join("\n")
        end
        

        【讨论】:

        • 这很有帮助.. +1
        • 这太棒了!谢谢!
        【解决方案4】:

        我会写一个 before_save 回调并记录错误(如果有效)?返回 false。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2015-02-27
          • 2021-09-19
          • 1970-01-01
          • 1970-01-01
          • 2011-04-25
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多