2012-03-26 80 views
0

我有一個Donation.rb模型,其中amount列需要一個整數。我想將所有的個人捐款彙總在一起,並在主頁上顯示總額。Ruby:合計金額

在home_controller,我做@donations = Donation.all,然後在視圖中我做

<% sum = 0 %> 
<% @donations.each do |donation| %> 
<%= sum += donation.amount if donation.amount? %> 
<% end %> 

的問題是,這是每一個新的捐款被添加到它的時候打印的運行總和。我只是想在全部加起來之後把總數加在一起。

+1

我不是Rails專家,但是我想說你可能想要在控制器或其他東西中添加總和,然後在視圖中使用'<%= sum %>'顯示總和。 – 2012-03-26 05:12:12

回答

1

您正在打印運行總和,因爲您實際上正在使用=標誌打印它。 你需要改變這一行:

<%= sum += donation.amount if donation.amount? %> 

有了:

<% sum += donation.amount if donation.amount? %> 

然後,只是打印的sum價值,無論你想這樣做的:

<%= sum %> 
1

這應該打印總和一旦完成計算。

<% sum = 0 %> 
<% @donations.each do |donation| %> 
    <% sum += donation.amount if donation.amount? %> 
<% end %> 
<%= sum %> 
4

你不應該在視圖中做任何計算,這些東西應該在控制器或模型中完成,如果可以的話。這樣的事情我會在控制器

@donations = Donation.paginate(:page => params[:page], :order => 'created_at desc', :per_page => 20) 
@sum = Donation.sum(&:amount) 

做然後,只需在視圖

<%= @sum %> 
+2

請注意,「Donation.all」可能是一個非常大的項目列表。對這些事情進行分頁幾乎總是一個好主意,所以你永遠不會加載數據庫中的每一條記錄。 – tadman 2012-03-26 05:14:50

1

這是因爲<%= ... %>任何情況下將內聯結果打印出來的@sum。經常的<% ... %>版本不會。

儘管如此,不要在視圖中進行這種計算。在捐款上制定一個班級方法,以便爲您處理。如果您需要多條線來在視圖中表達計算,請創建一個輔助方法或更好的模型方法。