以水平格式显示数据

时间:2014-05-03 06:40:43

标签: ruby-on-rails

有没有办法在rails中生成数据到水平表?请指导我

<thead>
  <tr>
    <% @products.each do |pr| %>
      <th width="25px"><%= pr.name %></th>
    <% end %>
  </tr>
  <tr>
    <% @products.each do |pr| %>
      <th width="25px"><%= pr.brand %></th>
    <% end %>
  </tr>
</thead>

数据库中的表格产品

|  name  | brand  |
-------------------
|   A    | brand1 |
|   B    | brand2 |
|   C    | brand3 |

我想在视图上生成如下:

|  A     |   B    |   C    |
----------------------------
| brand1 | brand2 | brand3 |

3 个答案:

答案 0 :(得分:1)

最好的方法是使用transpose

<% @products.collect{|p| [p.name, p.brand]}.transpose.each do |line| %>
  <tr>
    <% line.each do |cell| %>
      <td><%= cell %></td>
    <% end %>
  </tr>
<% end %>

说明:

@products.collect{|p| [p.name, p.brand]}将生成以下数组: [['A','brand1'],['B','brand2'],['C','brand3']]

transpose会像这样转置你的数组: [['A','B','C'],['brand1','brand2','brand3']]

在该阵列上循环时,第一个line将是您的产品名称,第二个line将是您的品牌名称。

小心不要在非常大的结果集上使用,因为@products.collect渴望加载

答案 1 :(得分:0)

尝试 each_slice

<tr>
    <% Product(1..10).each_slice(3) do |pr| %>
      <th width="25px"><%= pr.name %></th>
      <th width="25px"><%= pr.brand %></th>
    <% end %>
  </tr>

注意:没有对它进行过测试。只是试试看,让我知道。

答案 2 :(得分:0)

使用collect构建哈希

<tr>   
  <% @products.collect{ |p| {name: p.name, brand: p.brand }}.each do |pr| %>
    <th width="25px"><%= pr[:name] %></th>
    <th width="25px"><%= pr[:brand] %></th>
  <% end %>
</tr>