как создать таблицу с помощью циклов и haml с ruby?
Я пытаюсь сделать таблицу 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>
3 ответов
вы должны попытаться поместить всю логику для создания массива строк и столбцов в вашем контроллере. Рендеринг представления в 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
- количество столбцов.
вы можете использовать each_slice следующим образом:
- @f_ary.each_slice(5) do |row|
%tr
- row.each do |cnt|
td=cnt
обновление
Это может быть самый ООН-Руби способ сделать это (я сделал это около 3 лет назад). Так что
проверить ответы выше, и они намного лучше
Я просто сохраню этот ответ без удаления, просто как ссылку на то, как этого не делать... ;)
имейте внутренний счетчик в представлении, когда дело доходит до 5, Добавьте a . 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
Я надеюсь, что вы получите идея!--4-->
ура
sameera