5

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

无论如何,是否可以为数据库回滚启用更详细的日志记录?

4

1 回答 1

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

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

class Foo < ActiveRecord::Base
  include RollbackLogger
end

编辑:

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

ActiveRecord::Base.send(:include, RollbackLogger)

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

于 2013-10-25T20:09:55.803 回答