gpt4 book ai didi

mysql - 在 ActiveRecord 中按多个 id 获取分组值

转载 作者:行者123 更新时间:2023-11-30 21:44:53 24 4
gpt4 key购买 nike

抱歉英语不好))

我的 ruby​​ 代码中有一个 id 数组。

示例:

[[10], [], [10, 1, 3], []]

我可以通过保存分组在一个查询中从 MySQL 表 users 加载 User 模型吗?

例子:

[[#<User id=10>], [], [#<User id=10>, #<User id=1>, #<User id=3>], []]

环境:Ruby 2.5.1 | rails 5 | MySQL

找到的解决方案之一:

我可以展平我的 id 数组并通过该数组将我的模型加载到哈希中:

hash = User.where(id: array.flatten).index_by(&:id)

然后,在迭代期间,通过数组,我可以按照正确的顺序从散列中加载我的对象:

array.each do |ids|
users = ids.map { |id| hash[id] }
# do smth
end

最佳答案

这很简单:对数组使用 flatten 方法:

ids = [[123], [], [123, 1, 3, 4], [70, 80]]
user_ids = ids.flatten.reject(&:blank?).uniq
users = User.where(id: user_ids)

编辑:不是您需要的最佳(递归)方法:

def map_users_by_id(ids_array:, users:)
result = []
ids_array.each do |array_element|
if (array_element).is_a? Array
result << map_users_by_id(ids_array: array_element, users: users)
else
result << users[array_element]
end
end
return result
end

ids = [[123], [], [123, 1, 3, 4], [70, 80]]
user_ids = ids.flatten.reject(&:blank?).uniq
users = Hash[User.where(id: user_ids).map{|user|[user.id, user]}]
result = map_users_by_id(ids_array: ids, users: users)

关于mysql - 在 ActiveRecord 中按多个 id 获取分组值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49924657/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com