我有一个带有amount
列的Donation.rb模型,它带有一个整数。我想将所有个人捐款汇总在一起,并在主页上显示总数。
在home_controller中,我正在@donations = Donation.all
,然后在视图中我做
<% sum = 0 %>
<% @donations.each do |donation| %>
<%= sum += donation.amount if donation.amount? %>
<% end %>
问题是,每次添加新捐款时,都会打印运行金额。我只是想在它们全部加在一起之后的总和。
答案 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上创建一个类方法,它将为您处理它。如果您需要多行来表示视图中的计算,请创建一个辅助方法,或者更好的模型方法。