我正在尝试在我的一个视图中创建一个表,该表显示来自单个行中两个单独哈希的值的组合。所需的输出将有三列:材料,单位和净重。
在我的控制器中,我生成像这样的哈希:
@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磅。两条相同的铜排。
如何:
答案 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 %>