web-dev-qa-db-ja.com

Rubyでループとhamlを使用してテーブルを作成するにはどうすればよいですか?

私は次のような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>
22
sybind

コントローラーに行と列の配列を作成するためのすべてのロジックを配置する必要があります。 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_は列の数です。

57
Todd Yandell

次のようにeach_sliceを使用できます。

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