首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在ActiveRecord中通过多个in获取分组值

在ActiveRecord中通过多个in获取分组值
EN

Stack Overflow用户
提问于 2018-04-19 15:18:50
回答 1查看 1.7K关注 0票数 2

(对不起,英语不好)

我的红宝石代码中有一个ids数组。

示例:

代码语言:javascript
运行
复制
[[10], [], [10, 1, 3], []]

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

示例:

代码语言:javascript
运行
复制
[[#<User id=10>], [], [#<User id=10>, #<User id=1>, #<User id=3>], []]

环境:Ruby2.5.1\ Rails 5= MySQL

已找到的解决方案之一:

我可以扁平I数组,并通过该数组将模型加载到散列中:

代码语言:javascript
运行
复制
hash = User.where(id: array.flatten).index_by(&:id)

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

代码语言:javascript
运行
复制
array.each do |ids|
  users = ids.map { |id| hash[id] }
  # do smth
end
EN

回答 1

Stack Overflow用户

发布于 2018-04-20 10:45:32

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

代码语言:javascript
运行
复制
ids = [[123], [], [123, 1, 3, 4], [70, 80]]
user_ids = ids.flatten.reject(&:blank?).uniq
users = User.where(id: user_ids)

编辑:非最佳(递归)方法满足您的需要:

代码语言:javascript
运行
复制
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)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49924657

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档