在Rails中使用.each方法时如何在一行显示两列数据
解决方案
要实现每行显示两列室友信息,核心是把室友列表按每2个一组拆分,每组对应表格的一行,每组里的每个室友对应一列。具体修改如下:
修改后的代码
<table> <% # 先筛选符合显示条件的室友,简化模板逻辑 %> <% valid_roommates = @lease.apartment.roommates.reject do |roommate| roommate == @lease.second_occupant || roommate == @lease.user end.select { |rm| rm.current_room.present? && rm.current_room.apartment == @lease.apartment } %> <% # 每2个室友为一组,生成表格行 %> <% valid_roommates.each_slice(2) do |roommate_pair| %> <tr> <% roommate_pair.each do |roommate| %> <td> <p> <%= roommate.full_name %> - <%= roommate.current_room.label %> <br>Email: <%= roommate.email %> <br>Phone: <%= roommate.phone %> <br> <% if @lease.end_at.present? %> Lease End date (if applicable): <%= @lease.end_at %> <% end %> </p> </td> <% end %> <% # 可选:如果组内只有1个室友,补空列保证表格结构对齐 %> <% if roommate_pair.size == 1 %> <td></td> <% end %> </tr> <% end %> </table>
关键调整说明
- 前置筛选逻辑:把原本嵌套在
<td>里的条件判断提前,先筛选出需要显示的室友(排除租约的两个居住者、确保有当前房间且房间属于对应公寓),避免生成空的无效列。 each_slice(2)分组:利用Ruby的Enumerable方法,将数组按2个元素拆分,直接对应表格每行两列的需求。- 移除
colspan="5":原属性让单个<td>占满整行,现在每个<td>仅占一列,符合两列布局要求。 - 可选空列补全:如果最后一组只有1个室友,补一个空
<td>让表格结构更整齐,不需要的话可删除这段逻辑。
内容的提问来源于stack exchange,提问作者Fuaad
相关产品推荐
相关产品推荐

