0

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

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>
.........
4

1 回答 1

1

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

选择 1

改变

for i in (0..tasks.length)

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

选择 2

采用each_slice(3)

@tasks_row = @tasks.each_slice(3)
于 2013-03-31T15:25:16.987 回答