如何使用循环和haml与ruby创建表?

时间:2011-04-02 07:04:25

标签: ruby-on-rails 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>

3 个答案:

答案 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年前做过这个)。所以

查看以上答案&amp;他们好多了

我会保留这个答案而不删除,只是作为参考,如何不做...;)


在视图中有一个内部计数器,当涉及到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