Let’s have model :parents and :children, where one parent can have many
children, and that I want to do something like this:
plist=Parent.joins(:children).select(‘*’).where(“parents.id=children.parent_id
and children.cfield=#{…}”)
plist.each { |p| do_something_with(p,p.children) }
Now I learned from
Active Record Query Interface — Ruby on Rails Guides , 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?