Forum: Ruby on Rails Using both :include and :joins in find()

Announcement (2017-05-07): is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see and for other Rails- und Ruby-related community platforms.
Ba79eb31ceaef95e9e52f5e5e4ec6d02?d=identicon&s=25 John Kopanas (Guest)
on 2008-12-22 23:44
(Received via mailing list)
I would like to do this:

Greeter.find(:all, :select => "DISTINCT user_id", :include => [:user],
:joins => [:user], :order => "users.nickname")

But an error is always thrown,  I either do the join so that I go
order on the join table... which I have to do... or I do eager loading
which helps out a lot with the efficiency of the page load time... but
I can not do both it seems... or can I?

John Kopanas

81b61875e41eaa58887543635d556fca?d=identicon&s=25 Frederick Cheung (Guest)
on 2008-12-23 00:05
(Received via mailing list)
On 22 Dec 2008, at 22:43, John Kopanas wrote:

> I can not do both it seems... or can I?
In such a case just the :include would create a join.

53be54e5db4dc58e4980db5a8255621b?d=identicon&s=25 Harold (Guest)
on 2008-12-23 00:14
(Received via mailing list)
It would be nice to know what error gets thrown. I suspect it has
something to do with using :select in a find where you also
use :include, but I may be wrong. As far as I know, :select is ignored
when you used :include.
Another potential error is that you're joining the users table twice:
once on the :include (a left outer join), and once with the :joins (an
inner join). The generated SQL would not contain aliases for the
joined table, so it is specifying users twice. Is it your DBMS
throwing the error?

From the look of your :select, it seems like what you want back is
User objects, not Greeter objects. If so, why are you querying using
"Greeter.find", instead of "User.find"?

This could probably be what you're looking for:

User.all(:joins => :greeter, :order => 'users.nickname') #get all
users who also are greeters.


Greeter.all(:include => :users, :order => 'users.nickname') #get all
greeters, and eager load the users.

What is it? No idea!


This topic is locked and can not be replied to.