Rails:关联表

时间:2018-04-10 09:53:12

标签: html ruby-on-rails ruby sum

我有一个网站列表,每个网站都有一个域名列表。我已经总结了这些域名的每个网站的成本。我接下来要做的是总结网站的所有费用,并获得所有网站的总价格。

所以我必须总结成本:

<% @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

现在我需要找到一种方法来总结这些总和......

2 个答案:

答案 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 %>