ActiveRecord不包含关系

时间:2015-08-26 17:43:50

标签: ruby-on-rails activerecord

我有这样的查询:

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')正常工作。还有其他人经历过吗?找出解决方案?

1 个答案:

答案 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 })时,不需要明确提及。