Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 如何在ruby中使用循环和haml创建表?_Ruby On Rails_Haml - Fatal编程技术网

Ruby on rails 如何在ruby中使用循环和haml创建表?

Ruby on rails 如何在ruby中使用循环和haml创建表?,ruby-on-rails,haml,Ruby On Rails,Haml,我正在尝试创建一个如下所示的html表: 1 2 3 4 5 1 2 3 4 5 1 2 3 4 5 <table border='1'> <tbody> <tr> <td>1</td> <td>2</td> <td>3</td> <td>4</td> <td>5</td&g

我正在尝试创建一个如下所示的html表:

1 2 3 4 5
1 2 3 4 5
1 2 3 4 5
<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>
我的数据结构如下:@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 
我当前的输出如下所示:

1 2 3 4 5
1 2 3 4 5
1 2 3 4 5
<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>

1.
2.
3.
4.
5.
1.
2.
3.
4.
5.
我希望它看起来像这样:

1 2 3 4 5
1 2 3 4 5
1 2 3 4 5
<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>

1.
2.
3.
4.
5.
1.
2.
3.
4.
5.

您应该尝试将创建行和列数组的所有逻辑放在控制器中。然后,在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
查看:

@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
如果您有一个扁平的项目数组,而不是像我的示例中那样的数组数组,则可以使用
扁平数组轻松地将其转换。每个\u片(5)。到\u a
,其中
5
是列数。

更新 这可能是最不符合ruby的方式(我大约在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
conneter=0
@项目。每个|项目|
如果计数器==0
结束
如果计数器!=5.
项目
柜台++
结束
如果counetr==5
counetr=0
结束
结束
结束
我希望你明白我的意思

干杯


sameera

您可以像这样使用每个切片:

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

不过,我的数据结构不是数组数组。这只是一个类似这样的大列表:@items=[1..250]在示例代码中出现编译错误。在每一个“-
”后面都添加了一个标识,这很有效。哎呀,我没听清楚。现在修好了。很高兴我能帮忙!有趣的factoid,如果它是rails应用程序,您不需要在控制器中将项目处理到该结构中。您只需运行
my\u array即可。在(5)个组中,您就有了自己的数组。但是,对于Rails,Ali在接受答案中的提示更好;当数组大小不能被列计数平均整除时,in_groups_of()将填充网格中的“空”单元格,从而避免出现“丢失”td单元格。这真是太好了。