Reputation: 3398
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
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