Re: Issue w/ Eager Loading

Philip Hallstrom
Tue, 12 Jun 2007 16:41:49 -0000

> Hi,
>
> I have a rails app that uses these models:
>
> class CoreRouter < ActiveRecord::Base
>  has_many :ports
> end
>
> class Port < ActiveRecord::Base
>  belongs_to :core_router
>  has_many :addresses
> end
>
> class Address < ActiveRecord::Base
>  belongs_to :port
> end
>
> I have one main list page that shows all CoreRouters, the associated
> ports and the associated addresses.  The problem is that I now have over
> 400 addresses and I''m seeing over 400 queries when I generate this
page,
> taking about 10 seconds to load.  I thought an answer may be Eager
> Loading:
>
> @core_routers = CoreRouter.find(:all, :include => [ :ports, :addresses
> ])
>
> But that fails:
>
> ActiveRecord::ConfigurationError (Association named
''addresses'' was not
> found; perhaps you misspelled it?):
>
> I''m assuming this is because the CoreRouter class doesn''t
have a direct
> association with the Address class.
>
> How can I get it to eagerly load the addresses that are associated with
> the ports?

@core_routers = CoreRouter.find(:all,
:include => {:ports => :addresses})

(it''s either that or...)

:include => :ports => :addresses)

I can never remember as well I''ve never actually done it :)