2012-03-26 28 views
0

私はamountの列を持つDonation.rbモデルを持っています。私はすべての個々の寄付金を一緒に合計し、ホームページに合計を表示したいと思います。Ruby:合計金額

home_controllerでは、私は@donations = Donation.allをやっているし、次にビューで、私は

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

問題は、これは、実行中の合計に新しい寄付がそれに追加されるたびに印刷されていることです。彼らはすべて一緒に追加された後、私はちょうど最後に合計をしたい。

+1

私はRailsのエキスパートではありませんが、コントローラーなどで合計を加算してから、「<%= sum %>」を使用して合計を表示したいと思うでしょう。 –

答えて

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

1

<%= ... %>の任意のインスタンスが結果をインライン化しますので、それはだで@sumをプリントアウト。通常の<% ... %>バージョンでは表示されません。

ビューでこの種の計算をしないでください。あなたのためにそれを処理する寄付のクラスメソッドを作成します。ビュー内で計算を表現するために複数の行が必要な場合は、ヘルパーメソッド以上のモデルメソッドを作成します。

関連する問題