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

升级Rails6后出现PG::UndefinedTable缺少company_groups表FROM子句错误如何修复

Rails 6 升级后 PG::UndefinedTable 报错解决方案

错误根因

该报错和你之前修复的查询报错逻辑完全一致:Rails 5.0+ 版本调整了includes关联预加载的底层逻辑,当查询的where条件使用字符串写法关联其他表的字段时,Rails不会自动将关联表加入查询的FROM/JOIN子句中,必须显式声明references指定关联表才能正常执行。

修复步骤

  • 找到Company模型中user_companies作用域的定义代码
  • 确认该作用域内使用了includes关联company_groups表,且where条件使用字符串写法引用了company_groups的字段
  • 在该作用域的查询末尾追加references(:company_groups)即可,和你之前修复Book查询的方案完全匹配

示例代码

原scope写法:

scope :user_companies, -> { includes(:company_groups).where("company_groups.user_id = ?", current_user_id) }

修改后写法:

scope :user_companies, -> { includes(:company_groups).where("company_groups.user_id = ?", current_user_id).references(:company_groups) }

替代方案

你也可以将字符串形式的where条件改为哈希形式,这种写法Rails会自动处理关联表的JOIN逻辑,不需要额外加references:

scope :user_companies, -> { includes(:company_groups).where(company_groups: { user_id: current_user_id }) }

额外注意

你表单代码里还用到了Company.dealers作用域,如果该作用域也存在关联表+字符串where条件的写法,需要同步做相同修改,避免后续触发同类报错。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 10:15:03