Ruby:总金额

时间:2012-03-26 05:07:16

标签: ruby-on-rails ruby

我有一个带有amount列的Donation.rb模型,它带有一个整数。我想将所有个人捐款汇总在一起,并在主页上显示总数。

在home_controller中,我正在@donations = Donation.all,然后在视图中我做

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

问题是,每次添加新捐款时,都会打印运行金额。我只是想在它们全部加在一起之后的总和。

4 个答案:

答案 0 :(得分:4)

你不应该在视图中进行任何计算,这些东西应该在控制器或模型中完成,如果可以的话。对于类似这样的事情我会在控制器中进行

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

然后只需在视图中打印出@sum

<%= @sum %>

答案 1 :(得分:1)

您正在打印总和,因为您实际上是使用=符号打印它。 您需要更改此行:

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

使用:

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

然后,只需在任意位置打印sum的值:

<%= sum %>

答案 2 :(得分:1)

这应该在完成计算后打印总和。

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

答案 3 :(得分:1)

这是因为<%= ... %>的任何实例都会内联结果。常规<% ... %>版本不会。

不要在视图中进行这种计算。在Donation上创建一个类方法,它将为您处理它。如果您需要多行来表示视图中的计算,请创建一个辅助方法,或者更好的模型方法。