我有两个模型:
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 :user
end
add_stats
范围表示附加到User
对象的繁重计算。因此,如果我想获取所有User
具有统计信息的对象,我只需编写User.all.add_stats
.
到目前为止,一切都很好。现在我想获取一些Purchase
对象并急切地加载带有统计信息User
的s 。我试过这个:
belongs_to :user, -> { add_stats }
但是当 Rails 急切地加载用户时,它似乎删除.group("user.id").joins(:purchases)
并抱怨purchases.price
- “购买表未知”。因此,这.select()
是从范围中保留的唯一内容。
如何将范围(使用 working .group().joins()
)应用于所有包含belongs_to :user
对象的急切加载查询?