在单个 html 表中显示来自两个哈希的值
Posted
技术标签:
【中文标题】在单个 html 表中显示来自两个哈希的值【英文标题】:Display values from two hash's in a single html table 【发布时间】:2014-02-08 00:24:22 【问题描述】:我正在尝试在我的一个视图中创建一个表,该表在一行中显示来自两个单独散列的值的组合。所需的输出将包含三列:材料、单位和净重。
在我的控制器中,我像这样生成哈希:
@materialGroups = @shipment.shipmentDetails.count(:group => :product_name)
@materialTotals = @shipment.shipmentDetails.group(:product_name).sum(:net_weight)
@materialGroups 包含产品名称和每个产品的单位数 @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 组(即 ShipmentDetails 中只有 Steel),这一切都可以正常工作。但是,如果我在 ShipmentDetails 中有多个产品名称(即钢和铜),我会在表中为每个产品名称获得重复的行。因此,我没有使用 20 个单位 @ 净重 200 磅的钢排,而是得到两排相同的排。铜的两行相同。
怎么做:
-
在视图中正确遍历两个哈希?
或者,或者,只生成一个哈希并对其进行迭代以获得所需的结果?
【问题讨论】:
【参考方案1】:如果您使用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 %>
【讨论】:
谢谢!效果很好,唯一需要注意的是我必须在 count(*) 和 sum(net_weight) 中添加一个 as 子句才能访问这些值。以上是关于在单个 html 表中显示来自两个哈希的值的主要内容,如果未能解决你的问题,请参考以下文章
如何在 MVC 的单个视图中制作插入表单和显示来自数据库的数据的表?