2011-09-19 64 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 %>