Rails HTML-вывод для таблицы - PullRequest
       0

Rails HTML-вывод для таблицы

0 голосов
/ 20 сентября 2011

Мне сложно разобраться, как создать помощник для моего массива, который выводит HTML-таблицу, вот как выглядит мой массив.

[
  {"day"=>1.0, "hour"=>14.0, "count"=>818.0},
  {"day"=>1.0, "hour"=>15.0, "count"=>366.0},
  {"day"=>1.0, "hour"=>16.0, "count"=>1246.0},
  {"day"=>1.0, "hour"=>17.0, "count"=>116.0},
  {"day"=>1.0, "hour"=>18.0, "count"=>434.0},
  {"day"=>1.0, "hour"=>19.0, "count"=>123.0},
  {"day"=>1.0, "hour"=>20.0, "count"=>442.0},
]

Кроме того, так должна выглядеть моя таблица, как я могу для каждого дня выводить свое имя в заголовке, а затем для каждого часа каждого часа каждого дня выводить значение count из моего хэша? Мне трудно представить, как перебирать эти значения.

<table>
  <tr>
    <th style="width:8em"></th>
    <th>Monday</th>
    <th>Tuesday</th>
    <th>Wednesday</th>
    <th>Thursday</th>
    <th>Friday</th>
    <th>Saturday</th>
    <th>Sunday</th>
  </tr>

  <tr>
    <th scope="row">00:00–01:00</th>
    <td>468</td>
    <td>2721</td>
    <td>848</td>
    <td>3127</td>
    <td>803</td>
    <td>1970</td>
    <td>2673</td>
  </tr>

  <tr>
    <th scope="row">01:00–02:00</th>
    <td>468</td>
    <td>2721</td>
    <td>848</td>
    <td>3127</td>
    <td>803</td>
    <td>1970</td>
    <td>2673</td>
  </tr>

  <!-- remaining hours of the day for each day continue... -->

</table>

Любая помощь была бы очень признательна.

1 Ответ

1 голос
/ 20 сентября 2011

Ваши данные не соответствуют тому, что вы хотите с ними сделать, поэтому первым шагом является преобразование ваших данных.Этот фрагмент кода довольно уродливый, но он сделает свое дело:

# arr holds your original array of hashes
by_hour = arr.group_by { |x| x["hour"] }
by_hour.each do |k, v|
  v.sort! { |a,b| a["day"] <=> b["day"] }.map! { |x| x["count"] }
end

by_hour теперь выглядит так:

{20.0=>[442.0],
 19.0=>[123.0],
 14.0=>[818.0],
 18.0=>[434.0],
 17.0=>[116.0],
 15.0=>[366.0],
 16.0=>[1246.0]}

, где массив содержит счетчики для каждого днянеделю (с понедельника по воскресенье, если предположить, что воскресенье 7.0.

Отсюда должно быть тривиально построить таблицу. Что-то вроде:

<% by_hour.keys.sort.each do |hour| %>
  <tr>
    <% by_hour[hour].each do |count| %>
      <td><%= count %></td>
    <% end %>
  </tr>
<% end %>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...