有一件事情让我在Rails中感到疯狂,那就是我会在控制台看到一个ROLLBACK
消息,但没有附加原因。这经常导致我寻找某些验证错误,但更详细的消息会更好。
是否有一种方法可以启用更详细的日志记录以查看数据库回滚的原因?
有一件事情让我在Rails中感到疯狂,那就是我会在控制台看到一个ROLLBACK
消息,但没有附加原因。这经常导致我寻找某些验证错误,但更详细的消息会更好。
是否有一种方法可以启用更详细的日志记录以查看数据库回滚的原因?
您可以使用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
模块。
ActiveRecord::Base.send(:include, RollbackLogger)
。 - Damien Roche