Rails 4,回滚时如何更好地记录日志?

5

有一件事情让我在Rails中感到疯狂,那就是我会在控制台看到一个ROLLBACK消息,但没有附加原因。这经常导致我寻找某些验证错误,但更详细的消息会更好。

是否有一种方法可以启用更详细的日志记录以查看数据库回滚的原因?

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模块。


我对Rails还比较新,如何以非侵入性的方式在所有模型中实现这个功能? - James McMahon
2
@ChrisLedet 请看这里:https://dev59.com/anE95IYBdhLWcg3wY9D6。使用这个关注点,您可以在每个模型中包含 ActiveRecord::Base.send(:include, RollbackLogger) - Damien Roche

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接