ActiveRecord, pgsql: запрос нескольких записей по нескольким индексам - PullRequest
0 голосов
/ 21 января 2019

В моей таблице Users пользователь определяется уникальным множественным индексом пары account_id и location_id.
Когда я получил запрос на получение данных для конкретной пары аккаунт / местоположение, я могу легко получить данные для этой пары:

account_location_hash = { account_id: 2, location_id: 3 }
user = User.find_by(account_location_hash)

Однако, когда мне нужно найти нескольких пользователей, имеющих массив хешей (сотни пар), не существует простого способа получить нужные мне сущности, хотя у меня есть ожидаемый список индексов этих сущностей.
Я пытался использовать:

pairs_array = [{ account_id: 2, location_id: 3 },{ account_id: 1, location_id: 4 }]
user = User.where(pairs_array)

но это не работает.

Я могу найти более сложные решения, такие как создание запроса AND и OR, или создание временной таблицы пар, которые я получил, и присоединение к таблицам, но ни одно из них не кажется правильным.
Я упускаю более простой подход?

Ответы [ 2 ]

0 голосов
/ 23 января 2019

Я думаю, что самое простое решение:

pairs_array = [{ account_id: 2, location_id: 3 },{ account_id: 1, location_id: 4 }]

account_ids = []
location_ids = []
pairs_array.each do |h|
  account_ids << h[:account_id]
  location_ids << h[:location_id]
end

User.where('account_id IN (?) AND location_id IN (?)', account_ids, location_ids).load
0 голосов
/ 23 января 2019

Это наименее сложное решение, которое я нашел до сих пор (использованный комментарий @engineersmnky, rails 5):

pairs_array.reduce(User.none) {|users, pair| users.or(User.where(pair))}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...