mysql - new - ruby on rails mvc
La consola Rails encuentra usuarios por una matriz de identificadores (6)
Así que tengo una matriz de identificadores de usuario. ¿Hay alguna manera en la consola de rails para consultar todos estos usuarios con la matriz
algo como
ids = [1, 2, 3, 4]
users = User.find(ids)
y hacer que devuelva a los 4 usuarios?
Esto es trabajo para mí ...
ids = [1, 2, 3, 4]
users = User.find(ids)
users = User.find(*ids)
users = User.find_all_by_id(ids)
Todos están trabajando ..
Para una matriz, puede usar uno de estos:
# 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
Si está utilizando un rango, puede usar estos:
# 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
Como notas de @ diego.greyrobot en un comentario, un rango provoca una cláusula SQL BETWEEN, mientras que una matriz provoca una cláusula SQL IN.
No use User.find_by_id()
: solo devolverá un registro, sin importar cómo pueden ingresar los ID.
Se supone que lo que estás haciendo funciona cuando todos los identificadores existen.
La razón por la que podría estar viendo una excepción es porque al menos uno de esos identificadores no existe en la base de datos.
En su lugar, desea utilizar find_all_by_id
si no desea obtener una excepción:
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)
Usar el operador de splash:
ids = [1, 2, 3, 4]
users = User.find(*ids)
Tenga en cuenta que generará una excepción si no puede encontrar a ninguno de los usuarios.
puedes usar
Users.where({ id: [1,2,3 ,4]})
# SELECT * FROM users WHERE id IN (1,2,3,4)
puedes usar User.where(id: ids)