Ronan Lopes
Ronan Lopes

Reputation: 3398

Active Record - Unknown column for includes

I'm doing an Active Record query like this:

esco = EscoContrato.left_joins(
  cliente: {unidade_consumidoras: :usina},
  arrendamento_contratos: { arrendamento_contrato_unidades: { unidade_consumidora: { contas: :fatura_discriminacoes }}}
).where("unidade_consumidoras.distribuidora_id = 4")

This works fine, but I would like to use includes, since I'm gonna use these nested tables, so wouldn't do n+1 queries. However, that same query, if I change left_joins for includes, it gives me the error "unknown column unidade_consumidoras.distribuidora_id". What am I doing wrong? Thanks

Upvotes: 0

Views: 691

Answers (1)

Pavan
Pavan

Reputation: 33542

That is because includes require references when using conditions to explicitly reference them.

From the API

If you want to add conditions to your included models you’ll have to explicitly reference them.

So, this should work

EscoContrato.includes(
  cliente: {unidade_consumidoras: :usina},
  arrendamento_contratos: { arrendamento_contrato_unidades: { unidade_consumidora: { contas: :fatura_discriminacoes }}}
  ).where("unidade_consumidoras.distribuidora_id = 4").references(:unidade_consumidoras)

Alternatively, you can re-write your query like below without needing references

EscoContrato.includes(
  cliente: {unidade_consumidoras: :usina},
  arrendamento_contratos: { arrendamento_contrato_unidades: { unidade_consumidora: { contas: :fatura_discriminacoes }}}
  ).where(unidade_consumidoras: {distribuidora_id: 4})

Upvotes: 1

Related Questions