我的困惑源于这个问题,其中 OP 有一个类似的模型
class Quote < ActiveRecord::Base
has_many :items
def calc_price
sum = 0
#logic for summation
end
end
在答案中,有几个人建议直接使用 sum 方法来计算属性的总和
def total_price
items.sum('price')
end
如果我渴望使用 加载数据Quote.includes(:items).find(:all)
,总和是否发生在数据库的末尾,还是使用已加载到内存中的对象?如果它使用已加载到内存中的对象,则计算不会被卸载到数据库。
是否会进行两次数据库查询,一次是预加载,一次是汇总价格?
将相同的逻辑扩展到所有ActiveRecord::Calculations,如果我执行一个或其他此类方法,我会每次都访问我的数据库count
吗average
?