【问题标题】:how do I create a table using loops and haml with ruby?如何使用带有 ruby​​ 的循环和 haml 创建表?
【发布时间】:2011-07-28 03:56:09
【问题描述】:

我正在尝试制作一个如下所示的 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>

【问题讨论】:

    标签: ruby-on-rails haml


    【解决方案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 是列数。

    【讨论】:

    • 我的数据结构不是数组数组。它只是一个像这样的大列表:@items = [1..250]
    • 您的示例代码出现编译错误。在每个“- ”之后添加一个标识并且它起作用了。
    • 糟糕,我没听懂。现在修好了。很高兴我能帮上忙!
    • 有趣的事实,如果它是一个 Rails 应用程序,您不需要在控制器中将您的项目处理到该结构中。你可以简单地运行my_array.in_groups_of(5) 并且你有你的数组。
    【解决方案2】:

    更新

    这可能是最不受欢迎的方式,(我大约在 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
    

    希望你能理解

    干杯

    同人

    【讨论】:

      【解决方案3】:

      你可以像这样使用 each_slice:

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

      【讨论】:

      • 但是,对于 Rails,Ali 在接受的答案中的提示更好;当数组大小不能被列数整除时,in_groups_of() 会填充网格中的“空”单元格,从而避免出现“缺失”的 td 单元格。
      • 太美了。
      猜你喜欢
      • 2015-11-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-05-04
      • 1970-01-01
      • 2011-02-27
      相关资源
      最近更新 更多