0

私は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

4

1 に答える 1