Rails模型:包括自我的方法

时间:2013-10-07 22:36:07

标签: ruby-on-rails ruby-on-rails-3.2

我正在尝试优化数据库查询,因此在适当的时候添加了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查询时,似乎我正在引用模型自我,但我似乎找不到任何这样的例子。

谢谢!

1 个答案:

答案 0 :(得分:0)

您在实例方法中使用self,因此self是您的类的实例,但include是一个类方法。您需要使用原始示例代码来使用包含Model.includes(:related_model)的内容。我想你真正想要的是:

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

当我在不关注实例的子节点的关系中构建条件时,我会使用包含。