我有这样的查询:
PrimaryModel.includes(:associated_models)
.where(foo: true)
.where('associated_models.bar >= 0')
通常,这会提示ActiveRecord加入associated_models,但我得到此错误:
ActiveRecord :: StatementInvalid异常:PG :: UndefinedTable:错误: 表“associated_models”
缺少FROM子句条目
但是,像这样的查询将正确地连接表:
PrimaryModel.includes(:associated_models)
.where(foo: true)
.where(associated_models: { baz: true })
此外,也许最有说服力的是,这有效:
PrimaryModel.includes(:associated_models)
.where(foo: true)
.where(associated_models: { baz: true })
.where('associated_models.bar >= 0')
在最后一个中,'associated_models'由.where(associated_models: { baz: true })
加入,允许.where('associated_models.bar >= 0')
正常工作。还有其他人经历过吗?找出解决方案?
答案 0 :(得分:1)
如果您在尝试时在查询中使用关联名称,则必须明确说明:
PrimaryModel.includes(:associated_models)
.where(foo: true)
.where('associated_models.bar >= 0')
.references(:associated_models) # should be actual table name.
从doco阅读conditions部分。
但正如您所看到的那样,当您将其写为Hash
语法 - .where(associated_models: { baz: true })
时,不需要明确提及。