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 を削除する必要があります。

コンパクトを使用して 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 に答える