显示单个html表中两个哈希值的值

时间:2014-02-08 00:24:23

标签: html ruby-on-rails hash view html-table

我正在尝试在我的一个视图中创建一个表,该表显示来自单个行中两个单独哈希的值的组合。所需的输出将有三列:材料,单位和净重。

在我的控制器中,我生成像这样的哈希:

@materialGroups = @shipment.shipmentDetails.count(:group => :product_name)
@materialTotals = @shipment.shipmentDetails.group(:product_name).sum(:net_weight)

@materialGroups包含product_name和每个产品的单位数 @materialTotals包含product_name和每个产品的net_weights的总和。

我的视图包含以下代码以显示表格:

<table class="table">
        <th>Material</th>
        <th>Units</th>
        <th>Net Weight</th> 

        <% @materialGroups.each do | product_name, count| %>
        <% @materialTotals.each do | ship_net_weight, sum | %>
        <tr>
        <td><%= product_name %></td>
        <td nowrap="true"><%= number_with_delimiter(count) %></td>  
        <td nowrap="true"><%= number_with_delimiter(sum) %> lbs</td>
        </tr>
        <% end %>
        <% end %>
</table>

只要返回一个product_name组(即只有Steel在ShipmentDetails中),这一切都可以正常工作。但是,如果我在ShipmentDetails中有一个以上的product_name(即Steel和Copper),我会在表中为每个product_name获取重复的行。所以我得到两行相同的行,而不是钢铁有20行单位@净重200磅。两条相同的铜排。

如何:

  1. 在视图中正确迭代两个哈希值?
  2. 或者,只生成一个哈希并迭代它以获得所需的结果?

1 个答案:

答案 0 :(得分:0)

如果使用select,则可以生成一个哈希循环。尝试:

@materials = @shipment.shipmentDetails.select("count(*), sum(net_weight), product_name").group(:product_name)

然后在您的视图中,您可以执行以下操作:

<% @materials.each do |m| %>
  <tr>
    <td><%= m.product_name %></td>
    <td nowrap="true"><%= number_with_delimiter(m.count) %></td>  
    <td nowrap="true"><%= number_with_delimiter(m.sum) %> lbs</td>
  </tr>
<% end %>