2016-08-15 29 views
0

我想要考慮用戶標識乘以特定列的值。Rails使用ActiveRecord來疊加afcolumn的值

假設我有一個表users與用戶1(ID 1)和用戶2(ID 2),和一個表animals具有namemensal_cost

好吧,那我加了兩個動物用戶1(ID 1)和1個動物爲用戶2(ID 2)

我想知道我怎麼能使用ActiveRecord計算mensal_cost收入後3個月增加相同的基本價值,這意味着我有3

我想這樣的事情乘以實際值:

Animal.where(user_id: ?).sum('3*mensal_cost') 

因爲我不知道用戶究竟有多少,我必須寫一個將爲每個用戶列出的呼叫確認3個月後的金額。

回答

0

好吧,你幾乎有它自己 - 只是次要的細節可以是這樣的:

user_ids = [id1, id2] 
full_sum = 3 * Animal.where(:user_id => user_ids).sum(:mensal_cost) 

注意:不要忘了,你可以用三個相加相乘之後,它會是一樣的如求和乘以3例如每一個

(3 * 2)+(3×3)+(3×4)== 3 *(2 + 3 + 4)

,或者您可以通過迭代用戶可以得到如下個人款項:

mensal_sums = {} 
user_ids = [id1, id2] 
user_ids.each do |user_id| 
    mensal_sums[user_id] = 3 * Animal.where(:user_id => user_id).sum(:mensal_cost) 
end 

puts mensal_sums 
=> {id1 => 63, id2 => 27} 

編輯 和一個你想要的用戶名,以及:

mensal_sums = {} 
users = User.find([id1, id2]) 
users.each do |user| 
    mensal_sums[user.id] = {:user_name => user.name, 
          :sum => (3 * user.animals.sum(:mensal_cost)) } 
end 

puts mensal_sums 
=> {id1 => {:user_name => "Bob Jones", :sum => 63}, 
    id2 => {:user_name => "cJane Brown", :sum =>27} 
    } 
+0

泰倫,所有的人都知道,謝謝你的回答。但這種方式會讓我所有用戶的mensal_cost總數乘以3.我真正需要的是看到像:id1 mensal_cost * 3 = 300,id2 mensal_cost * 3 = 700 ... – Bruno

+0

啊很酷。是的,我明白你的意思了。你可以遍歷用戶數組來構建它......在一個查詢中可能有一個「group by」方法,但迭代方式可以工作得很好。我會添加一個例子。 –

+0

偉大的:),你的例子probab會幫助我很多,因爲現在我需要爲每個用戶ID獲取用戶名(在用戶表中)。 我想我可能需要做一些像User.joins(:動物)....在這裏我不知道如何構造一個哈希,我已經閱讀但沒有得到它:( – Bruno

0

我只是想出瞭解決方案:

Animal.group('user_id').sum('3*mensal_cost') 

組是關鍵:d

相關問題