我正在尝试制作一个看起来像这样的html表:
1 2 3 4 5
1 2 3 4 5
1 2 3 4 5
我的数据结构如下:@f_ary = [1..250]
这是我的haml代码:
%table{:border => "1"}
%tbody
%tr
- cnt = 0
- @f_ary.each do |f|
- cnt += 1
%td= cnt
- if cnt == 5
- cnt = 0
%tr
我目前的输出如下:
<table border='1'>
<tbody>
<tr>
<td>1</td>
<td>2</td>
<td>3</td>
<td>4</td>
<td>5</td>
<tr></tr>
<td>1</td>
<td>2</td>
<td>3</td>
<td>4</td>
<td>5</td>
</tr>
</tbody>
</table>
我希望它看起来像这样:
<table border='1'>
<tbody>
<tr>
<td>1</td>
<td>2</td>
<td>3</td>
<td>4</td>
<td>5</td>
</tr>
<tr>
<td>1</td>
<td>2</td>
<td>3</td>
<td>4</td>
<td>5</td>
</tr>
</tbody>
</table>
答案 0 :(得分:57)
您应该尝试在控制器中放置用于创建行和列数组的所有逻辑。然后在Haml中渲染视图变得非常简单:
<强>控制器:强>
@items = [
[1, 2, 3, 4, 5],
[6, 7, 8, 9, 10],
[11, 12, 13, 14, 15]
]
查看:强>
%table
%tbody
- @items.each do |row|
%tr
- row.each do |column|
%td= column
如果你有一个扁平的项目数组而不是我的例子中的数组数组,你可以使用flat_array.each_slice(5).to_a
轻松转换它,其中5
是列数。
答案 1 :(得分:9)
您可以像这样使用each_slice:
- @f_ary.each_slice(5) do |row|
%tr
- row.each do |cnt|
td=cnt
答案 2 :(得分:-11)
这可能是最无耻的做法,(我在3年前做过这个)。所以
我会保留这个答案而不删除,只是作为参考,如何不做...;)
在视图中有一个内部计数器,当涉及到5时,添加一个。 psudo会看起来像这样的东西
couneter = 0
@items.each |item|
if counter == 0
<tr>
end
if counter != 5
<td>item</td>
counter ++
end
if counetr == 5
</tr>
counetr = 0
end
end
end
我希望你明白这个想法
欢呼声
sameera