On Oct 24, 2007, at 3:55 PM, Rick DeNatale wrote:
> Prompted by some discussion on rails-talk last week,  I worked up a
> patch to add an option to ActiveRecord::Base#find which allows
> associations to be :included for purposes of the where clause, but
> defers instantiating the included association objects.
>
>
> The use case is where there are a large number of association rows
> returned by the query, the vast majority will not be used since they
> are only being used to select a small set of root objects.
>
>
> Here's the ticket with the patch:
> http://dev.rubyonrails.org/ticket/9923

I don't mean to be obtuse, but I don't understand why a new feature  
is needed.  The :joins option works fine for me for finding records  
based on joins to other tables.  Inner joins are a better fit for  
selection conditions when you don't want the eagerly loaded records.   
What you are doing with your approach is an outer join (since that's  
how eager loading works).  That includes all the result data for the  
eagerly loaded records, which you'll be dropping on the floor and  
ignoring.  That's making the database work a lot more for no reason.

If you wanted something friendlier than a SQL joins clause string,  
like the hash/array syntax used by the :include option, that could be  
a good alternate syntax for :joins.  Much more Rails-like too.  I'd  
be interested in seeing something that lets you do:

Post.find(:all, :joins => {:comments => :author}, :conditions =>  
["authors.name = ?", name]

That should generate SQL

SELECT posts.* FROM posts
INNER JOIN comments ON post.id = comments.post_id
INNER JOIN authors ON comment_id = authors.id
WHERE authors.name = 'Bob Dobbs';

It's a radically different approach than yours in how you'd do it in  
ActiveRecord code, so it might not be something you want to take on.   
If not, I might give it a shot in my copious spare time.

Disclaimer: It's late on a Friday.  Take what I say with a few grains  
of salt!

--
Josh Susser
http://blog.hasmanythrough.com



--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups "Ruby 
on Rails: Core" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at 
http://groups.google.com/group/rubyonrails-core?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to