On Wednesday, July 2, 2014 1:38:37 PM UTC+1, Ruby-Forum.com User wrote:
> Now I learned from
> http://guides.rubyonrails.org/active_record_querying.html , that this is
> inefficient, due to the SELECT statements generated inside the block,
> and that I should do "eager loading" instead. From my understanding of
> the tutorial, I should replace 'joins' by 'includes':
>
> plist=Parent.includes(:children).select('*').where("parents.id=children.parent_id
>
>
> and children.cfield=#{...}")
>
> However, this raises the exception that there would be no column
> "children.cfield".
>
> It seems that with 'includes', we can only query based on values of the
> Parent table.
>
> Is this correct?
>
>
In rails 4.1 (or possibly 4.0) and later you must use references if you
are adding conditions on one of the joined columns, ie
Parent.includes(:children).references(:children)
So that rails knows it must use the joins based eager loading strategy
(rails used to try and guess this for you but this was rather error-prone).
You also don't need the select('*')
Fred
--
You received this message because you are subscribed to the Google Groups "Ruby
on Rails: Talk" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To post to this group, send email to [email protected].
To view this discussion on the web visit
https://groups.google.com/d/msgid/rubyonrails-talk/e352ab6e-ce3e-4c2e-9631-56fc5e67517f%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.