Rails 4,更好地记录回滚?

Jam*_*hon 5 logging ruby-on-rails rollback ruby-on-rails-4

Rails让我发疯的一件事就是我会ROLLBACK在控制台中看到一条消息,没有任何理由附加到回滚上.这经常导致我寻找一些验证错误,但是有一个更详细的消息会很高兴.

有没有为db回滚启用更详细的日志记录?

Chr*_*det 5

您可以使用after_rollback回调.

创建一个名为RollbackLogger的模块,并将其放在app/concerns目录中

module RollbackLogger
  extend ActiveSupport::Concern

  included do
    after_rollback :log_status, on: [:create, :update]
  end

  def log_status
    Rails.logger.info "Rollback caused by: #{self.errors.full_messages}"
  end
end
Run Code Online (Sandbox Code Playgroud)

然后在每个ActiveRecord模型中包含此模块:

class Foo < ActiveRecord::Base
  include RollbackLogger
end
Run Code Online (Sandbox Code Playgroud)

编辑:

正如Damien Roche先生建议的那样,您可以在config/initializers目录中创建一个新文件并添加以下行:

ActiveRecord::Base.send(:include, RollbackLogger)
Run Code Online (Sandbox Code Playgroud)

所有型号都将RollbackLogger自动包含该模块.

  • @ChrisLedet见这里:http://stackoverflow.com/questions/2328984/rails-extending-activerecordbase.考虑到问题,您可以在每个模型中包含`ActiveRecord :: Base.send(:include,RollbackLogger)`. (2认同)