2014-02-08 3 views
0

Я пытаюсь создать таблицу в одном из моих представлений, которая отображает комбинацию значений из двух отдельных хэшей в одной строке. Желаемый результат будет иметь три столбца: материал, единицы и вес нетто.Отображение значений из двух хэш-таблиц в одной таблице html

В моем контроллере я генерировать хэш следующим образом:

@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 возвращается (т. Е только сталь была в ShipmentDetails). Однако, если у меня есть более одного product_name (т. Е. Steel and Copper) в ShipmentDetails для отправки, я получаю повторяющиеся строки в таблице для каждого product_name. Поэтому вместо того, чтобы иметь один ряд для стали с 20 единицами @ вес нетто 200 фунтов, я получаю две одинаковые строки. И две одинаковые строки для Copper.

Как можно:

  1. итерацию по два хэш-х правильно с точки зрения?
  2. Или поочередно генерировать только один хэш и перебирать его для получения желаемого результата?

ответ

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 %> 
+0

Спасибо! отлично работает, только заметьте, что мне пришлось добавить предложение as для подсчета (*) и sum (net_weight), чтобы получить доступ к значениям. – user2967603

Смежные вопросы