2013-10-22 58 views
0

我想獲得一個地圖內的表中的行多列的總和,但金額僅適用於模型選擇這樣的:ActiveRecord的總結列

columns = 'col1 + col2 + col3' 

Model.all.map do |model| 
    Model.where(:id => model.id).sum(columns) 
end 

我想做到這一點,所以我不用再次訪問數據庫,很明顯這是行不通的:

columns = 'col1 + col2 + col3' 

Model.all.map do |model| 
    model.sum(columns) 
end 

關於如何做到這一點任何想法或技巧?請記住,必須columns作爲columns值將改變基於以下幾個標準來使用。

+0

所以,你真的想'model.col1 + model.col2 + model.col3'每個'model'但你要使用的實際表現是在'columns'字符串? –

+0

是的,但我相信Stefan的解決方案可能是最好的 – stewart715

回答

2

不能使用SQL查詢數據庫之外。不過,如果我正確地理解你的問題,這樣的事情應該工作:

columns = 'col1 + col2 + col3' 

Model.select("*, #{columns} AS my_sum").map do |model| 
    model.my_sum # the calculated sum 
end 

確保正確逃生您的自定義SQL查詢。