2010-12-05 20 views
8

我有兩個Rails模型,一個孩子和一個家長說。Rails中的相關模型和SUM查詢

我知道我能做到這一點:

Child.sum(:income, :conditions => "parent_id = #{@parent_id}") 

但我希望能夠做到這一點:

Parent.children.sum(:income) 

但是,這是給我的錯誤的價值觀,如果我嘗試它。是否有更簡潔的書寫方式

Child.sum(:income, :conditions => "parent_id = #{@parent_id}") 

TIA

[PS:Rails 3的開發環境]

回答

13

很抱歉,但我剛剛發現這個問題的答案。我需要將to_a添加到Child對象的集合中,然後調用proc,如下所示:

Parent.children.to_a.sum(&:income) 

這是一種魅力。

3

對不起,碰到一箇舊的線程,但我想我找到了更好的(最好的?)解決方案。下面是我的項目,我結束了

self.purchases.where(:script_id => script_id, :approved => true).sum(:instances) 

它生成一個查詢不正是我需要的

SELECT SUM("purchases"."instances") AS sum_id FROM "purchases" WHERE "purchases"."customer_id" = 1 AND "purchases"."script_id" = 1 AND "purchases"."approved" = 't' 
+0

我不得不說我喜歡這種想法在模型中發生一點點更好 – 2016-06-15 15:35:23

3

我跑到那裏的孩子被委託給父母一個問題,我需要的代碼找到一筆款項。

children.to_a.sum(:parent_income) 

給了我一個主要的N + 1問題。解決的辦法是使用:

children.joins(:parent).sum(:income) 
0

我也導軌4如果被相符的項目是活躍或不活躍檢查也碰到了類似的情況,這裏是解決方案。我在保存之前在模型中運行了這個。

order_items.collect { |oi| oi.valid? ? (oi.quantity * oi.price) : 0 }.sum