2014-09-25 45 views
0

我們建立在我們的控制器一些對象:如何延遲加載或急切加載關聯表的總和?

@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 =>:estimated)的急切加載關聯,但在這種情況下,它並不重要,因爲我們在查詢上執行了SUM,看起來很特殊。

我該如何加載SUM以避免所有瘋狂的查詢?目前它已超過600 ...

回答

0

只提供您的條件&僅在此查詢中排序,這會將結果推送到哈希中。

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是估算表中的列。