You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 21:10:39