簡體   English   中英

在ActiveRecord中按多個ID獲取分組的值

[英]Get grouped values by multiple ids in ActiveRecord

對不起,英語不好))

我的紅寶石代碼中有一個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)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM