2013-12-19 77 views
0

s是數組的哈希紅寶石,採摘於哈希

relativebase = s.pluck(:base_point).inject(:+) + s.pluck(:distance_point).inject(:+) + s.pluck(:speed_point).inject(:+) + s.pluck(:frequency_point).inject(:+) + s.pluck(:quality_point).inject(:+) 

這是調用數據庫的四倍,我想在一個單一的查詢做。我怎麼能得到這個。

回答

0

喜歡的東西:

User.select(:a, :b, :c, :d).all.inject([]) { |res, e| res << e.a; res << e.b; res << e.c; res << e.d; res }

+0

當你將有多行,然後使用'do..end'塊樣式 –

+0

我們可以通過這種方式實現s.sum(:base_point)+ s.sum(:distance_point)+ ......但是它再次調用數據庫四次,我想在一次調用中減少這個數據庫。在此先感謝 – cyborg

0

軌道4個supports多個名字中pluck

relativebase = s.pluck(:base_point, 
         :distance_point, 
         :speed_point, 
         :frequency_point).inject(0) do |sum, (bp, dp, sp, fp)| 
        sum + bp + dp + sp + fp 
       end 

其實我個人認爲,它可能是更好的計算數據庫的總和,但我我不知道如何在鋼軌上做到這一點:

SELECT SUM(base_point + distance_point + speed_point + frequency_point) FROM s 
+0

我們也可以通過這種方式實現s.sum(:base_point)+ s.sum(:distance_point)+ .......但它再次調用數據庫四次,我想減少一次調用。提前致謝 – cyborg