Ruby on rails 每个循环:显示一次项目和合计数量

Ruby on rails 每个循环:显示一次项目和合计数量,ruby-on-rails,ruby,loops,unique,Ruby On Rails,Ruby,Loops,Unique,我目前正在使用这段代码循环特定日期的订购项目 <tr> <th>Item</th> <th>Quantity</th> </tr> <% @demand.each do |d| %> <% d.demand_items.each do |item| %> <tr> <td><%= item.item.name %></td>

我目前正在使用这段代码循环特定日期的订购项目

<tr>
  <th>Item</th>
  <th>Quantity</th>
</tr>
<% @demand.each do |d| %>
  <% d.demand_items.each do |item| %>
    <tr>
      <td><%= item.item.name %></td> 
      <td><%= @item_count %></td>
    </tr>
  <% end %>
<% end %>

项目
量
当前,如果项目1被多次订购,它将在列表中显示多次。我只希望它显示一次,旁边有一个数字,显示订购了多少。例如,如果物料_1的需求量为5,物料_1的需求量为10,则结果应为:

项目1。。。。十五


谢谢

我会尝试获取uniq项目,然后在循环时计数,比如:

(@demand.demand_items.sort.uniq).each do |d|
  d.item_name
  d.demand_items.count
end
这是未经测试的伪代码。

这应该可以做到:

<tr>
  <th>Item</th>
  <th>Quantity</th>
</tr>
<% @demand.flat_map(&:demand_items).group_by(&:item).each do |item, demands| %>
  <tr>
    <td><%= item.name %></td>
    <td><%= demands.map(&:quantity).inject(:+) %></td>
  </tr>
<% end %>

这很接近,但它显示的是需求(订单)的总数,而不是订购该项目的总次数。接近!我可能没有解释清楚这一点,因为我需要。每个需求可以订购任意数量的商品。因此,需求_1可以订购项目_1的5,需求_2可以订购项目_1的10。我需要在项目1旁边显示数字15。这个例子将返回2,因为它出现在2个需求中完美的谢谢你的帮助!
@demand.flat_map(&:demand_items)
# equivalent: (long version)
@demand.map{ |demand| demand.demand_items }.flatten
# retrieves all demand_items of each demand in the @demand list
# flatten the result (which is a double-dimension array)

demands.map(&:quantity)
# sends .quantity call to each element of the demands list
# and put it in an array (so this returns an array of quantity of each demand)
# equivalent: (long version)
demands.map{ |demand| demand.quantity }

demands.map(&:quantity).inject(:+)
# the inject(:+) will inject the method + (add) between each element of the array
# since the array is a list of quantities
# the inject(:+) sums each quantity of the list