Подтвердить что ты не робот

Консоль Rails находит пользователей по массиву идентификаторов

Итак, у меня есть массив идентификаторов пользователей. Есть ли способ в консоли rails запросить всех этих пользователей с массивом

что-то вроде

ids = [1, 2, 3, 4]

users = User.find(ids)

и вернуть ли он всех 4 пользователей?

4b9b3361

Ответ 1

Для массива вы можете использовать один из них:

# Will raise exception if any value not found
User.find( [1,3,5] )

# Will not raise an exception
User.find_all_by_id( [1,3,5] ) # Rails 3
User.where(id: [1,3,5])        # Rails 4

Если вы используете диапазон, вы можете использовать их:

# Will raise exception if any value not found
User.find((1..4).to_a)   #same as User.find([1,2,3,4])

# Will not raise an exception
User.find_all_by_id(1..4)  # Rails 3
User.where(id: 1..4)       # Rails 4

Как отмечает @diego.greyrobot в комментарии, диапазон вызывает предложение SQL BETWEEN, тогда как массив вызывает предложение SQL IN.

Не использовать User.find_by_id() - он будет возвращать только одну запись, независимо от того, как могут проходить идентификаторы.

Ответ 2

вы можете использовать User.where(id: ids)

Ответ 3

Использовать оператор всплеска:

ids = [1, 2, 3, 4]

users = User.find(*ids)

Обратите внимание, что это вызовет исключение, если он не найдет никого из пользователей.

Ответ 4

Это работа для меня...

ids = [1, 2, 3, 4]

users = User.find(ids)

users = User.find(*ids)

users = User.find_all_by_id(ids)

Все работают..

Ответ 5

То, что вы делаете, должно работать, когда существуют все идентификаторы.

Причина, по которой вы можете увидеть исключение, состоит в том, что по крайней мере одна из этих идентификаторов не существует в базе данных.

Вместо этого вы хотите использовать find_all_by_id, если вы не хотите получать исключение:

User.find_all_by_id([1, 2, 3, 4])

# Does the following sql:    
User Load (0.4ms)  SELECT `users`.* FROM `users` WHERE `users`.`id` IN (1, 2, 3, 4)

Ответ 6

вы можете использовать

   Users.where({ id: [1,2,3 ,4]})
 # SELECT * FROM users WHERE id IN (1,2,3,4)