Gunnar Blom
2013-Oct-24 21:40 UTC
Includes (eager loads) of associations that includes joins fails
When an association has *joins* (either to filter the association or
calculate something), it cannot be eager loaded with *includes*. The *joins
*command seems to be omitted and I get an error saying the table
doesn''t
exist cause it didn''t the join when eager loading.
Example:
class User < ActiveRecord::Base
has_many :purchases
# Perform joins and attach some calculations to the User object
scope :add_stats, -> {
group("users.id").joins(:purchases).select("users.*,
SUM(purchases.price) AS total_purchases") }end
class Purchase < ActiveRecord::Base
belongs_to :userend
The add_stats scope represents heavy calculations attached to the User objects.
So if I want to get all User objects with stats, I just write
User.all.add_stats.
So far so good. Now I want to fetch some Purchase objects and eager load
the Users *with stats* as well. I''ve tried this:
belongs_to :user, -> { add_stats }
But then when Rails eager load the users, it seems to remove
.group("user.id").joins(:purchases) and complain on purchases.price -
"purchases table unknown". So the .select() is the only thing
preserved
from the scope.
*How do I apply a scope (with working .group().joins()) to the eager load
query of all included belongs_to :user objects?*
--
You received this message because you are subscribed to the Google Groups
"Ruby on Rails: Talk" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to
rubyonrails-talk+unsubscribe-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org
To post to this group, send email to
rubyonrails-talk-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org
To view this discussion on the web visit
https://groups.google.com/d/msgid/rubyonrails-talk/41e837d1-0838-4d54-a535-265763b0a926%40googlegroups.com.
For more options, visit https://groups.google.com/groups/opt_out.