2014-10-05 19 views
1

我想總結我的商店的客戶將獲得的總折扣。我可以成功地循環每一行(產品)對RRP節約使用下面的代碼,但是我想總結總在隨即出現在我看來,新的表格列的......麻煩總結一個數組的結果 - 嘗試.inject,.sum但無濟於事

<% total = ((product_sums[product.id]-product.trans.average(:price))*product_qty[product.id]) %> 

<td><%= total %></td> 

我曾嘗試使用;

total.inject(:+) 

total.inject{|sum, x| sum + x} 

.sum(:price) 

但每次我收到同樣的錯誤;

undefined method `inject' for #<BigDecimal... 

難道有人請簡單指出我要去哪裏嗎?

預先感謝您

+0

似乎是你的「總」已經是一個小數,只是檢查它的價值。 – mymlyn 2014-10-05 10:10:22

+0

嗨,謝謝你回來,你是什麼意思? (Ruby和Rails的新手)。 我期待總結/添加數組的所有結果,這是你的意思嗎? – thegreengiant 2014-10-05 10:14:23

+0

當你調用inject時,你的總數已經是小數了:'total.inject(:+)'你現在正在做的事情是:(2.0).inject(:+) – mymlyn 2014-10-05 10:16:49

回答

1

按照上述上下文的意見,得到的答案是遠遠超過了過於複雜的方法,我試圖解決它簡單。

我只是用下面...

<% total_savings = @buyer.trans.average(:price)*@buyer.trans.sum(:quantity) %> 

<strong>Total savings</strong> - £<%= total_savings %> 
+0

在我看來,你應該在大多數時候避免保持你的邏輯: '@average_price = @buyer .trans.average(:price)'和'@quanti ty = *@buyer.trans.sum(:quantity)'然後在視圖中使用'@ average_price'和'@ quantity'。不知道其餘的邏輯是怎麼樣的,但你甚至可能將其大部分移到模型中。通過這種方式,您可以儘可能少地重複代碼,從需要的任何地方獲取所需的數據。我想你可能想看看這個http://apidock.com/rails/ActiveRecord/QueryMethods/includes關於你的.trans方法/範圍。 – mymlyn 2014-10-05 13:12:32