升级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
相关产品推荐
相关产品推荐

