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

如何在ERB中遍历两个数组?Ruby/ERB新手技术求助

问题分析与解决方案

你的问题出在ERB代码中对find方法的使用方式错误,导致用户信息重复输出,且无匹配用户时的处理逻辑缺失。

问题原因

  1. 原代码中,@users.find的块内直接输出用户信息和消息内容,没有通过条件判断控制输出时机。find会遍历用户数组,直到找到第一个匹配user.id == peep.user_id的元素,但遍历过程中每一个被处理的用户都会触发块内的输出语句,这就是为什么每条消息旁都重复显示第一个用户的信息。
  2. 对于无匹配用户的message4,原代码没有判断用户是否存在,虽然后续输出没有用户信息,但这是依赖环境自动处理空值的偶然结果,并非正确写法。

修正后的ERB代码

<html>
  <body>
    <h1>Peeps</h1>
    <% @peeps.each do |peep| %>
      <% # 找到当前消息对应的用户 %>
      <% user = @users.find { |u| u.id == peep.user_id } %>
      <div>
        <% # 仅当用户存在时输出用户信息 %>
        <% if user %>
          <%= user.name %> <%= user.username %><br><br>
        <% end %>
        <%= peep.message %><br><%= peep.time_stamp %>
      </div>
      <br>
    <% end %>
  </body>
</html>

修正逻辑说明

  • 先在每个消息循环中,单独找到对应的用户并赋值给变量,避免遍历用户数组时重复输出。
  • 通过if user判断用户是否存在,确保只有找到匹配用户时才显示用户信息。
  • 消息内容和用户信息的输出逻辑分离,每个消息只会对应一次用户信息(如果存在)。

内容的提问来源于stack exchange,提问作者hibscodes

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 07:05:19