如何显示数组数组

时间:2013-03-31 15:08:18

标签: ruby-on-rails ruby arrays ruby-on-rails-3

我的控制器中有一些代码:

def index
 @tasks = Task.paginate(page: params[:page], per_page: 12 )    
 @tasks_row = task_to_rows(@tasks)

 respond_to do |format|
  format.html # index.html.erb
  format.json { render json: @tasks }
 end
end

task_to_rows:

def task_to_rows(tasks)
  item_at_row = 0
  task_row = Array.new
  for i in (0..tasks.length)
    item_at_row += 1
    if item_at_row == 1
      temp_arr = Array.new
      temp_arr << tasks[i]
      task_row << temp_arr
    elsif item_at_row <= 3
      temp_arr << tasks[i]
      task_row << temp_arr
    end
    item_at_row = 0 if item_at_row == 3
  end

  return task_row
end

需要使用方法,即数组的每个元素都是三个元素的数组。并且能够显示如下信息:https://www.evernote.com/shard/s8/sh/5dee1bbd-af05-4432-9e24-586de98f4452/a8229d8d3fd0bb222a76a927a70ee507

在视图中我有:

<% @tasks_row.each do |task3| %>
  <h3>Row</h3>
  <% task3.each do |task| %>
    <%= task.name %>
  <% end -%>
<% end -%>

但是Rails显示错误:

undefined method `name' for nil:NilClass

如果是调试,那么一切正常并显示。

更新: 在最终版本中,我只需要以这种格式显示数据:

<div class="row>
  <div class="span3">Some data</div>
  <div class="span3">Some data</div>
  <div class="span3">Some data</div>
</div>
<div class="row">
  <div class="span3">Some data</div>
  <div class="span3">Some data</div>
  <div class="span3">Some data</div>
</div>
.........

1 个答案:

答案 0 :(得分:1)

如果我正确理解task_to_rows,您希望数组按3分组吗?在这种情况下,我建议你改用each_slice(3)。您添加的方法容易出错,可能会导致一些导致错误的零元素。请注意,如果tasks[i]大于或等于数组的长度,则nil可能会变为i。这很可能是因为您使用tasks.length时出现错误。所以你有2个选择。

选择1

更改

for i in (0..tasks.length)

for i in (0..(tasks.length - 1))

选择2

使用each_slice(3)

@tasks_row = @tasks.each_slice(3)