Rails 4 - 在进行求和时对查询进行分组和循环

时间:2016-04-13 07:50:33

标签: ruby-on-rails activerecord rails-activerecord

所以我有下表Sales,具有多态关系:

----------------------------------
| id | product_id | product_type |
----------------------------------
|  1 |         45 | Rim::Entry   |
----------------------------------
|  2 |         45 | Rim::Entry   |
----------------------------------
|  3 |         23 | Tyre::Entry  |
----------------------------------
| .. |        ... |         ...  |

我希望能够遍历销售,并显示它们显示每种产品的销售量。这是我目前的部分内容:

<% @order.sales.???????.each do |sale| %>
    <p>Product ID: <%= sale.product_id %></p>
    <p>Product name: <%= sale.product.description %></p>
    <p>Amount sold: <%= sale.??? %></p>
<% end %>

这是我希望输出结果的样本:

Product ID: 45
Product Name: Rim Model AAA
Amount sold: 2

Product ID: 23
Product Name: TyreZ model XYZ
Amount sold: 1

...

3 个答案:

答案 0 :(得分:1)

如果您想要为每种产品销售的数量,您应该遍历产品,而不是销售。

<% Product.includes(:sales).each do |product| %>
  <%= product.id %>
  <%= product.sales.count %>
<% end %>

答案 1 :(得分:1)

您可以使用group_by

<% @order.sales.group_by { |s| s.product }.each do |product, sales| %>
    <p>Product ID: <%= product.id %></p>
    <p>Product name: <%= product.description %></p>
    <p>Amount sold: <%= sales.count %></p>
<% end %>

答案 2 :(得分:0)

我找到了答案,即使我不确定它是最漂亮的还是:

<% @order.sales.group(:product_id).count.each_pair do |product_id, count| %>
    <div class="product">
        <% product = @order.sales.where(product_id: product_id).first %>
        <p>Product_id: <%= product.product.description %></p>
        <p>Amount: <%= count %></p>
    </div>
<% end %>