在单个 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 的单个视图中制作插入表单和显示来自数据库的数据的表?

使用php从多个mysql表中获取并显示值

如何从 db 中的两个表中路由、获取和显示数据到 laravel 5.2 中的单个网页

来自选择查询的一个单元格中的多个值

在网页上的 HTML 表中显示 MySQL 数据库表中的值

如何在预定义的 html 表中显示来自 javascript 数组的图像