将哈希表转换为直列

时间:2014-06-08 21:04:52

标签: sql ruby-on-rails formatting html-table

我的视图会生成一个如下所示的表:

7days ::::: 30days :::: 90days
[1,2,5,6] [2,5,6,7] [4,6,7,6]

相反,我想要一个看起来像的表:

7天:30天:90天左右 1 ::::::::: 2 ::::::::::: 4 5 ::::::::: 5 ::::::::::: 6 1 ::::::::: 6 ::::::::::: 7

我不确定如何将哈希变成列。

控制器

@daysvals = Dcomet.group(:site).sum(:ls7day),
Dcomet.group(:site).sum(:gt7day),
Dcomet.group(:site).sum(:gt30day),
Dcomet.group(:site).sum(:gt90day),
Dcomet.group(:site).sum(:gt180day),
Dcomet.group(:site).sum(:gt365day)

view.html.erb

<table>
<tr>
<td><h4>&lt;7days</h4></td>
<td><h4>&gt;7days</h4></td>
<td><h4>&gt;30days</h4></td>
<td><h4>&gt;90days</h4></td>
<td><h4>&gt;180days</h4></td>
<td><h4>&gt;365days</h4></td>
</tr>

<tr>
<% @daysvals.each do |test| %>
  <td><%= test.values%></td>
<% end %>
</tr>
</table>

Dcomet模型

class Dcomet < ActiveRecord::Base
attr_accessible :site, :case_id, :created_date, :ls7day, :gt7day, :gt30day, :gt90day, :gt180day, :gt365day, :hours_open
end

1 个答案:

答案 0 :(得分:0)

您将@dayvals设置为哈希列表您的视图必须将另一个列表扩展为表行,将每个内部列表扩展为行项。这将是接近的。在控制器中,转置以获取表行:

cols = [:ls7day, :gt7day, :gt30day, :gt90day, :gt180day, :gt365day]

# Make per-group ordered hashes of sums.
@daysvals = cols.map {|c| Dcomet.group(:site).sum(c)}

# Make a table where each hash's value sequence is a column.
@daystable = @daysvals.map{|hash| hash.values}.transpose

在视图中,每个列表元素发出一行

<% @daystable.each do |row| %>
  <tr>
  <% row.each do |item| %>
    <td><%= item %></td>
  <% end %> 
  </tr>
<% end %>