私は2つのモデルを持っています:
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
です。
ここまでは順調ですね。ここで、いくつかのオブジェクトをフェッチし、 sを統計とともにPurchase
熱心にロードしたいと考えています。私はこれを試しました:User
belongs_to :user, -> { add_stats }
しかしその後、Rails がユーザーを熱心にロードすると、削除.group("user.id").joins(:purchases)
されてpurchases.price
"purchases table unknown" というエラーが表示されるようです。したがって、.select()
スコープから保持されるのは だけです。
含まれているすべてのオブジェクト.group().joins()
の熱心な読み込みクエリにスコープを (動作中) 適用するにはどうすればよいですか?belongs_to :user