我的控制器中有一些代码:
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>
.........
答案 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)