2011-09-19 63 views
0

我有一個艱難的時間搞清楚如何爲我的數組輸出一個html表的助手,這裏是我的數組看起來像。Rails表格的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

您的數據與您想要處理的數據不符,因此第一步是轉換您的數據。下面這段代碼是很醜陋,但它會做的伎倆:

# 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 %>