有没有办法在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 |
答案 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>