Как получить объект nil, когда нет записи для определенного значения в предложении where в рельсах - PullRequest
0 голосов
/ 19 июня 2019

В настоящее время я получаю записи о пользователях, используя поле номера телефона в поле Где запрос в рельсах, как показано ниже.

users = User.where(phone: ["123421341234", "123423144", "123423144","444633333",,,,,,,,,,,,])

У меня есть записи пользователя для первых трех мобильных номеров.Но для 4-го мобильного номера (444633333) в таблице нет записи пользователя, поэтому для этого пользователя я хочу получить объект "nil" (если пользователь существует, то объект пользователя должен быть возвращен)

Как я могу изменить вышеуказанный запрос.результирующий массив должен содержать объекты в последовательности (в последовательности поискового массива)

1 Ответ

1 голос
/ 19 июня 2019

Я думаю, что единственный способ сделать это без большого количества запросов к БД - это сначала загрузить всех пользователей по номеру телефона, который у вас уже есть, а затем сопоставить ваши номера телефона с найденными пользователями

phones_numbers = [7799569, 7818111, 7820442, 78343033, 78347700, 7836863, 7837873, 7837898, 7838025, 7838442]
users = User.where(phone_number: phones_numbers)

users = phones_numbers.map { |number| users.find_by(phones_number: number) }

загруженный будет кэшироваться в памяти, поэтому даже если есть запросы, время их выполнения будет незначительным

, вы также можете использовать #detect, если хотите сделать это на уровне ruby ​​/ rails

#same stuff as above

users = phones_numbers.map { |number| users.detect { |user| user.phones_number == number } }
...