如何在ERB中遍历两个数组?Ruby/ERB新手技术求助
问题分析与解决方案
你的问题出在ERB代码中对find方法的使用方式错误,导致用户信息重复输出,且无匹配用户时的处理逻辑缺失。
问题原因
- 原代码中,
@users.find的块内直接输出用户信息和消息内容,没有通过条件判断控制输出时机。find会遍历用户数组,直到找到第一个匹配user.id == peep.user_id的元素,但遍历过程中每一个被处理的用户都会触发块内的输出语句,这就是为什么每条消息旁都重复显示第一个用户的信息。 - 对于无匹配用户的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
相关产品推荐
相关产品推荐

