Estoy usando un registro activo para crear una matriz.
users = User.all.to_aahora quiero encontrar más tarde en esta matriz ID de usuario: 1
users.find(1) pero no está dando resultado sino devolviendo todo. ¿Cómo puedo buscar en esta matriz de resultados mi identificación de usuario seleccionada? Puedo ver que los usuarios son una array pero con una matriz en cada registro del objeto User .
Si hago lo siguiente
user.first devuelve el objeto Usuario, pero quiero buscar, ¿cómo puedo hacerlo? Entiendo que si to_a , funcionará, pero luego creará otra consulta SQL.
Dado que es una matriz de objetos, debe usar find with block:
users.find { |user| user.id == 1 }User.find(1) es un ActiveRecord::FinderMethod . Pero cuando ya cargó todos los registros en la memoria, esos registros se transforman en instancias de User y se almacenan en una matriz. Por lo tanto, debe usar find o select cuáles se implementan en Array de esta manera:
users.find { |user| user.id == 1 } #=> returns the first found record users.select { |user| user.id == 1 } #=> returns an array with all found recordTenga en cuenta que las consultas de la base de datos pueden usar índices eficientes cuando se configuran correctamente. Lo que hace que las consultas a la base de datos sean muy rápidas. Cuando carga todos los registros en la memoria, esos registros deben traducirse a las instancias adecuadas. Y la búsqueda en una matriz no puede usar ningún índice, lo que significa que podría ser (dependiendo del tamaño de la matriz) más lenta que una nueva consulta de base de datos.