[英]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.