0

我尝试从https://stackoverflow.com/a/4103220/1297435

<% Room.all.in_groups_of(1).each do |room_array| %>
      <% room_array.each do |room| %>
      <%= check_box_tag "student[room_ids][]", room.id, @student.room_ids.include?(room.id), id: dom_id(room) %> <%= label_tag dom_id(room), room.name %><br>
      <% end %>
    <% end %>

当我更改in_groups_of(1)为时in_groups_of(5),我得到了错误

为 nil 调用 id,它会错误地为 4 - 如果你真的想要 nil 的 id,请使用 object_id

更新

<% Room.all.in_groups_of(5).each do |room_array| %>
          <% room_array.compact.each do |room| %>
          <%= check_box_tag "student[room_ids][]", room.id, @student.room_ids.include?(room.id), id: dom_id(room) %> <%= label_tag dom_id(room), room.name %><br>
          <% end %>
        <% end %>

为什么不显示到列?

在此处输入图像描述

4

1 回答 1

1

当数组中的对象数较少时,in_groups_of 方法用 nil 对象填充数组。所以你需要在渲染它们之前删除 nil 。

使用 compact 删除 nil 对象

<% Room.all.in_groups_of(1).each do |room_array| %>
      <% room_array.compact.each do |room| %>
      <%= check_box_tag "student[room_ids][]", room.id, @student.room_ids.include?(room.id), id: dom_id(room) %> <%= label_tag dom_id(room), room.name %><br>
      <% end %>
    <% end %>
于 2013-04-10T09:55:05.447 回答