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.

Reply via email to