【问题标题】:How to lazy-load or eager-load the sum of associated table?如何延迟加载或急切加载关联表的总和?
【发布时间】:2014-09-25 02:21:56
【问题描述】:

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

  @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 => :estimates) 的即时加载关联,但在这种情况下,这并不重要,因为我们正在对查询进行 SUM,这看起来很特别。

我将如何急切地加载 SUM,以免收到所有疯狂的查询?目前已经超过600...

【问题讨论】:

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


    【解决方案1】:

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

        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 }
    } 
    

    根据您的解释,我假设实际成本是估算表中的一列。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-09-30
      • 1970-01-01
      • 1970-01-01
      • 2011-03-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多