首页 > 解决方案 > 如何将 find_by 应用于数组数组的元素 - Rails

问题描述

我有以下数组数组user_ids

@host_and_guest = [
  ["1299d9c9-e5c9-4e49-b0ff-b986c415eee8", "346b5c2f-a459-4c4f-8193-e0928c86c66c"],
  ["1299d9c9-e5c9-4e49-b0ff-b986c415eee8", "346b5c2f-a459-4c4f-8193-e0928c86c66c"],
  ["1299d9c9-e5c9-4e49-b0ff-b986c415eee8", "346b5c2f-a459-4c4f-8193-e0928c86c66c"],
  ["1299d9c9-e5c9-4e49-b0ff-b986c415eee8", "1299d9c9-e5c9-4e49-b0ff-b986c415eee8"]
] 

我想应用User.find_by(id: XXXX).pluck(:longitude, :latitude,:city)到每个user_id子数组,以便为​​每个子数组创建另一个经度、纬度和城市数组。

请问有没有有效的方法呢?

标签: ruby-on-rails

解决方案


users = User.where(id: @host_and_guest.flatten)
            .pluck(:id, :longitude, :latitude, :city)
            .group_by(&:first) # creates hash with id as keys

@host_and_guest.map do |pair|
  # replace pair with array of 
  # [[longitude, latitude, city], [longitude, latitude, city]]
  pair.map { |id| users[id]&.drop(1) }
end

推荐阅读