3

データベースクエリを最適化しようとしているので、必要に応じて追加してModel.includes(:related_model)います。

モデル内のメソッド内でこれを使用する適切な方法は何ですか? たとえば、モデルに次のようなメソッドがあるとします。

def some_method
    self.child_models.each do |child_model|
      total_score += child_model.attribute
    end
end

このような場合、どのように使用すればよいincludesですか? このようにするのは当然のようですが、うまくいきません:

def some_method
    self.includes(:child_model).child_models.each do |child_model|
      total_score += child_model.attribute
    end
end

ほとんどの場合、n+1 クエリを生成すると、モデルの自己を参照しているように見えますが、この例を見つけることができないようです。

ありがとう!

4

1 に答える 1

0

インスタンス メソッドで self を使用しているため、self はクラスのインスタンスですが、includes はクラス メソッドです。includes を使用するには、オリジナルのサンプル コードを使用する必要がありますModel.includes(:related_model)。あなたが本当に欲しいのは次のとおりだと思います:

def some_method
  self.child_models.sum('attribute')
end

インスタンスの子を見ない関係で条件を構築する場合は、インクルードを使用します。

于 2013-10-07T23:00:53.763 に答える