You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Rails测试出现Bullet::Notification::UnoptimizedQueryError如何修复

问题修复方案

这个错误由性能检测工具Bullet抛出,核心原因是程序加载Inquiry记录后,又单独发起了查询请求获取其关联的partner_application数据,产生了N+1查询问题,可通过以下方案修复:


  • 方案1:修改序列化器的预加载配置(推荐)

你当前的序列化器配置只预加载了inquiry一级关联,没有包含inquiry下嵌套的partner_application关联,直接修改options中的include参数,添加嵌套关联的预加载声明即可:

let(:options) do
  {
    include: %i[inquiry inquiry.partner_application company assignee banks]
  }
end

如果你的序列化器不支持符号类型的嵌套关联写法,换成字符串格式即可:

include: ['inquiry', 'inquiry.partner_application', 'company', 'assignee', 'banks']
  • 方案2:在查询InquiryProcess的位置添加预加载

如果你是从数据库查询inquiry_process实例,直接在查询语句中声明嵌套关联的预加载:

# 示例查询语句,可根据你的实际写法调整
inquiry_process = InquiryProcess.includes(inquiry: :partner_application).find(id)
  • 方案3:确认关联必要性(可选)

先检查Inquiry对应的序列化器/业务代码中是否真的用到了partner_application的字段,如果是冗余调用,直接删除该关联的引用即可,不需要额外添加预加载逻辑。

  • 测试环境临时规避方案(不推荐)

如果仅测试场景需要临时跳过该检测,可以在测试用例中临时关闭Bullet的N+1检测:

around do |example|
  Bullet.enable = false
  example.run
  Bullet.enable = true
end

内容的提问来源于stack exchange,提问作者Petros Kalafatidis

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 23:45:03