Подтвердить что ты не робот

Как создать таблицу с использованием циклов и 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>
4b9b3361

Ответ 1

Вы должны попытаться поместить всю логику для создания массива строк и столбцов в вашем контроллере. Отображение представления в 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 - количество столбцов.

Ответ 2

Вы можете использовать each_slice так:

- @f_ary.each_slice(5) do |row|
  %tr
    - row.each do |cnt|
      td=cnt

Ответ 3

Обновление

Это может быть самый рубиновый способ сделать это (я сделал это около 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

Надеюсь, у тебя идея

веселит

sameera