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