好的,我有一系列'胜利者'这个数组代表在上一轮比赛中获胜的用户。然后我有一个名为'锦标赛参与'的对象数组,这代表参加锦标赛的所有用户(多对多关系连接表)。
对于每个“赢家ID”,我想迭代“锦标赛参与”数组,并使用与“赢家ID”匹配的user_id查找锦标赛参与,然后将其推送到名为“圆形参与”的新数组中......
我已经尝试了下面的代码,但我总是返回原来的'winner_ids'数组....
@challenges = Challenge.where(tournament_id: @tournament.id)
@winner_ids = @challenges.pluck(:winner_id)
@tournament_participations = @tournament.tournament_participations
@round_participations = []
@round_participations = @winner_ids.each do |winner_id|
@round_participation = @tournament_participations.where(user_id: winner_id)
@round_participations << @round_participation
end
each
返回它被调用的可枚举数;在这种情况下,@winner_ids.each
正在返回@winner.ids
。您不需要将迭代结果分配给@round_participations
。
另外,请查看the map
method。
使用map方法,而不是.each。
map方法可用于基于原始数组创建新数组,但使用提供的块修改的值。请参阅以下示例。
在每种方法的情况下
irb(main):001:0> arr = [1, 2, 3, 4, 5]
=> [1, 2, 3, 4, 5]
irb(main):002:0> arr.each { |a| print a -= 10, " " }
-9 -8 -7 -6 -5
=> [1, 2, 3, 4, 5]
你可以在迭代后看到它返回原始数组。但在地图的情况下
irb(main):005:0> arr = [1, 2, 3, 4, 5]
=> [1, 2, 3, 4, 5]
irb(main):006:0> arr.map { |a| 2*a }
=> [2, 4, 6, 8, 10]
map可以转换数组的内容,这意味着它可以对数组中的每个元素执行操作。