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