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 是您的类的实例,但 include 是类方法。您需要使用原始示例代码来使用包含Model.includes(:related_model)。我认为你真正想要的是:

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

当我在不查看实例子级的关系中构建条件时,我会使用包含。

于 2013-10-07T23:00:53.763 回答