我有一个网站列表,每个网站都有一个域名列表。我已经总结了这些域名的每个网站的成本。我接下来要做的是总结网站的所有费用,并获得所有网站的总价格。
所以我必须总结成本:
<% @websites.includes(:domains).each do |website| %>
<%= number_to_currency website.domains.sum(:costs), :locale => :nl %>
<% end %>
返回:
€65,00€12,50€12,50€12,50€12,50€25,00€25,00€23.435,50€37,50€0,00€0,00€0, 00€0,00€0,00€34,00
现在我需要找到一种方法来总结这些总和......
答案 0 :(得分:1)
为所有网站获取所有域的费用总和的最简单的解决方案是:
@websites.includes(:domains).map{|website| website.domains.sum(:costs)}.sum
修改强> 如果要获取数据库中所有域的成本总和,可以使用(它只生成一个SQL查询):
Domain.all.sum(:costs)
答案 1 :(得分:1)
比在Ruby中迭代更有效的方法是在查询中选择聚合:
@websites = Website.select('websites.*, SUM(domains.cost) AS websites.domain_costs')
.left_outer_joins(:domains)
这消除了将域记录加载到内存中的需要,并且DB在简单聚合方面比Ruby更有效。
然后您可以通过以下方式访问总和:
<% @websites.each do |website| %>
<%= number_to_currency website.domain_costs, :locale => :nl %>
<% end %>