2012-03-26 79 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。经常的<% ... %>版本不会。

尽管如此,不要在视图中进行这种计算。在捐款上制定一个班级方法,以便为您处理。如果您需要多条线来在视图中表达计算,请创建一个辅助方法或更好的模型方法。