find :include causing n+1 queires

Hey guys,

I just noticed one of my find calls is creating n+1 queries to be run. The find looks like this:

     Class.find(:all,         :include => [:user, :users],         :conditions => {:id=> ids},         :order => order )

This is on Rails 2.3.2.

First the class is queried, then the join table between class and users, and then each user in the users collection is queried individually. If I remove the :users from the include, then the users aren't loaded (until I hit them in the view).

I thought the whole point of :include is to avoid the n + 1 scenario?

Cheers,

Tim.

Hey guys,

I just noticed one of my find calls is creating n+1 queries to be run. The find looks like this:

 Class\.find\(:all,
    :include => \[:user, :users\],
    :conditions =>  \{:id=> ids\},
    :order => order \)

This is on Rails 2.3.2.

First the class is queried, then the join table between class and users, and then each user in the users collection is queried individually. If I remove the :users from the include, then the users aren't loaded (until I hit them in the view).

I thought the whole point of :include is to avoid the n + 1 scenario?

You should get one query per association loaded. If you are getting more than that then you are probably accidentally loading an association again. (for example be aware that the :include doesn't affect the association in the other direction). (I assume that in your actual app Class is called something else - you may run into strange problems if you try and override the core class Class with your own)

Fred