Fetch, for sure--I'm just unsure whether AR will use the extra data to actually 
populate the child objects.  If only I wasn't so lazy, I'd consult the docs 
and/or try it out. ;-)

Definitely take your point about taking advantage of the ORM.  But it seems to 
me that some people get fetishistic about avoiding SQL--are willing to torture 
AR into generating the exact SQL they want.  That's fun for a bit, but there's 
definitely a point where AR leaves you hanging--which is why find_by_sql exists.

-----Original Message-----
From: rubyonrails-talk@googlegroups.com [mailto:[EMAIL PROTECTED] On Behalf Of 
Justin Holzer
Sent: Tuesday, November 04, 2008 8:48 PM
To: Ruby on Rails: Talk
Subject: [Rails] Re: Using Inner/Outer join to eager fetch belongs_to 
associations


I'm sure you could write a SQL query to fetch everything with a single query. 
However, one of the things I like about ORM, be it ActiveRecord, Hibernate, 
etc, is not writing SQL, and being able to do write the data access code in the 
native language (Ruby, Java, C#, etc.). Of course, it is comforting to know 
that you can always fall back on SQL when you need it, but most of the time, I 
would prefer to let the ORM generate the SQL.

I was simply curious to see if it was possible to get ActiveRecord to fetch 
data for the base object plus some of it's associations in a single query using 
INNER JOINs. It appears this is not possible without either resorting to SQL 
queries (find_by_sql), or creating some kind of extension for ActiveRecord, in 
the case where you don't want to use SQL. If it ever becomes a major issue for 
me, I guess I'll just have to pick one of the two methods, unless of course, by 
that time someone has already written a plugin.

Thanks for the responses.

- Justin

On Nov 4, 11:55 am, "Pardee, Roy" <[EMAIL PROTECTED]> wrote:
> But is a plugin really required?  Can't you feed something to find_by_sql 
> that will get you both types of objects?
>
> -----Original Message-----
> From: rubyonrails-talk@googlegroups.com
> [mailto:[EMAIL PROTECTED] On Behalf Of Frederick
> Cheung
> Sent: Tuesday, November 04, 2008 1:32 AM
> To: Ruby on Rails: Talk
> Subject: [Rails] Re: Using Inner/Outer join to eager fetch belongs_to
> associations
>
> On Nov 4, 7:00 am, JustinHolzer<[EMAIL PROTECTED]> wrote:
> > I did a bit more looking in to using a :conditions hash to force
> > ActiveRecord to fall back on the Rails 2.0 method of eager fetching
> > associations, and this is absolutely not what I am looking for. For
> > one, the Rails 2.0 eager fetch strategy always uses OUTER JOINs, and
> > it also includes a join for all associations specified as an
> > :include, rather than just those that are specified in a condition.
>
> > I am looking for some way to essentially force ActiveRecord to
> > eagerly fetch specific associations/:include's using an INNER JOIN
> > in the query that is also being used to fetch the data for the base object.
> > The more I think about it, the more I think that this functionality
> > does not really exist in ActiveRecord, and it would have to be
> > written as an extension/plugin.
>
> > However, since I'm pretty new to Rails, I wanted to put it to all
> > the experts on this forum before throwing in the towel.
>
> Yup you've got it pretty much all figured out. For what it's worth,
> when it was just a belongs_to/has_one, the overhead of generating the
> crazy query with the joins, the database running the query, rails
> doing its fancy parse thingy on the results meant that
>
> Foo.find 123456, :include => :bar
>
> was often no faster than
> f = Foo.find 123456
> Bar.find 456798
>
> Fred


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

Reply via email to