如何延迟加载或急切加载关联表的总和?

时间:2014-09-25 02:21:56

标签: mysql ruby-on-rails-3 activerecord eager-loading

我们在控制器中构建了一些对象:

  @sites = Site.find(:all, :conditions => conditions, :order => 'group_id ASC')

然后在视图中(目前),我们正在做类似的事情:

@sites.each do |site|
   %p Site Name
     = site.name
   - actual = site.estimates.where('date<?', Date.today).sum(:actual_cost)
   %p
     = actual
end

基本上就是这样。

当然,这会触发对网站的查询,然后返回对N个网站的查询。我知道有关@sites = Site.find(:all,:include =&gt;:估计)的热切加载关联,但在这种情况下它并不重要,因为我们在查询上执行SUM,这看起来很特殊

我如何急切加载SUM,以至于我没有得到所有疯狂的查询?目前已超过600 ...

1 个答案:

答案 0 :(得分:0)

提供您的条件&amp;仅在此查询中排序,这会将结果推送到哈希。

    sites = Site.includes(:estimates).where('estimates.date < ? ', Date.today)
.order('sites.id ASC')

actual = 0 
sites.map { |site|
  site.estimates.map { |estimate|  actual = actual + estimate.actual_cost }
} 

根据你的解释,我假设actual_cost是估计表中的一列。