steps rails new mvc generate first example create commands active mysql ruby-on-rails ruby postgresql rails-console

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)