rails:循环内循环错误

时间:2013-03-05 08:14:42

标签: ruby-on-rails-3

任何人都可以说,为什么这段代码有效?

    <% @products.each do |p| %>
         <%= link_to p.name, product_path(p.id), :class => "title" %>
    <%end%>

这不是吗?

    <% @products.in_groups_of(2).each do |product_array| %>
        <% product_array.each do |p| %>
          <%= link_to p.name, product_path(p.id), :class => "title" %>
        <% end %>
    <%end%>

代码为nil提供了未定义方法`name'的错误:NilClass。 我没有得到它的线索。有人可以帮忙吗?

2 个答案:

答案 0 :(得分:2)

如果记录不足,则会附加nil,这就是为什么会出现nil:NilClass错误

>> %w(1 2 3).in_groups_of(2)        # => [["1", "2"], ["3", nil]]
>> %w(1 2 3).in_groups_of(2,false)  # => [["1", "2"], ["3"]]

请参阅in_groups_of(number, fill_with = nil)

<% @products.in_groups_of(2, false).each do |product_array| %>
    <% product_array.each do |p| %>
      <%= link_to p.name, product_path(p.id), :class => "title" %>
    <% end %>
<%end%>

答案 1 :(得分:0)

听起来你的产品数量很奇怪。如果您尝试将奇数分成两组,则最后一组中的最终产品将为零。你可以添加:

unless p.nil?
  <%= link_to p.name, product_path(p.id), :class => "title" %>
end

确保您拥有实例。