1

なぜこのコードが機能するのか、誰にもわかりますか?

    <% @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:NilClass に対して未定義のメソッド `name' のエラーを返します。私はそれの手がかりを得ていません。誰でも助けることができますか?

4

2 に答える 2

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%>
于 2013-03-05T08:36:41.787 に答える
0

製品の数が奇数のようです。奇数を2つのグループに分割しようとすると、最後のグループの最終的な積はnilになります。追加するだけです:

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

インスタンスがあることを確認します。

于 2013-03-05T08:32:07.180 に答える