Hi there,
assume that:
1 we have the following situation:
Book :has_many Pages :has_many Illustrations
==== ===== =============
2 certain pages have NO illustrations
3 the following 2 cases:
A) Book.find(:all,
:joins => [:pages => [:illustrations]])
B) Book.find(:all,
:include => [:pages => [:illustrations]])
Question: Is it correct that:
- in case A), the books containing pages WITHOUT any illustrations will
NOT show up in the results
- whereas in case B), these books WILL show up?
(Personally, I thought that the main difference between :joins and
:include was the “eager loading” part.)
Thanks for any explanation for this!
Tom
On Jun 2, 5:09 pm, Tom Ha [email protected] wrote:
Question: Is it correct that:
- in case A), the books containing pages WITHOUT any illustrations will
NOT show up in the results
- whereas in case B), these books WILL show up?
(Personally, I thought that the main difference between :joins and
:include was the “eager loading” part.)
:joins does an inner join, :include doesn’t (and may not even do a
join at all)
Fred
:joins does an inner join, :include doesn’t (and may not even do a
join at all)
If you say “may not”, when would it do or not do a join, then? And which
type of join?
Doesn’t :include amount to a LEFT JOIN, actually?
IME :include does a join if you are using the ‘included’ table in the
query conditions:
A.find(:all, :conditions => ‘a.column=1’, :include => ‘b’) # no join
A.find(:all, :conditions => ‘a.column=1 AND b.column=2’, :include =>
‘b’) # join
A.find(:all, :conditions => ‘a.column=1 AND b.column=2’, :include =>
‘b’) # join
And if you say “join”, you mean a “LEFT join” here, if I got the story
right…
Thanks, guys!