2014-01-14 104 views
0

快速火災問題。嵌入式紅寶石計數值

如果我有一個值列表,我不想找到總數並將其顯示在嵌入式ruby中,我該如何去做這件事。

<% @user.recipes.each do |i| %> 
    <% i.awards.each do |k| %> 
    <%= k.points %> 
    <% end %> 
<% end %> 

這使得:

1 10 5 5 10 1 5 10 5 1 

與不同於所述數據庫中的值每個數字(1,5或10)。有什麼辦法可以得到這個數字嗎?或者,在控制器中創建一個獨立的方法來解決這個問題會更好嗎?

回答

3
<%= i.awards.sum(:points) %> 

對於所有點的所有菜譜的總和:

<%= @user.recipes.map { |r| r.awards.sum(:points) }.sum %> 

雖然它可能是明智的模型中進行這樣的計算。如果您在多個視圖中使用它,您將刪除大量重複。

UPDATE:

按照下面的評論,你也可以詢問DB來計算的總和爲您提供:

<%= @user.recipes.joins(:awards).sum('awards.points') %> 
+0

絕對功臣。比你這麼多,那正是我需要的!這種方式現在應該沒問題。如果我需要在模型中執行此操作,我可能會稍後再進行更改。你會知道如何在模型中做這個計算嗎? – MikeHolford

+0

以完全相同的方式,只需將它放在'User'類中的一個方法中,稱爲'total_recipe_points'或某物,然後調用'@ user.total_recipe_points' – Jon

+1

我寧願看到所有食譜中所有點的總和到數據庫,我想。 –