Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

486
Vistas
Rieles: ¿Cómo encontrar una matriz de ID con .where pero ordenada?

Estoy tratando de buscar una lista de tiendas usando .where pero también estoy tratando de mantenerlas ordenadas como la misma matriz de ID.

es decir

 ids = ["4", "15", "10", "20", "1"] stores = Store.published.where(id: ids)

Parece que las tiendas se devuelven en orden ascendente de la identificación, como [{id: 20}, {id: 15} {id: 10}, {id: 4}, {id: 1}] . Me gustaría mantener ordenadas las tiendas devueltas de la misma manera que se ordenan las ids . También tenga en cuenta que los identificadores en cada tienda son enteros, mientras que los identificadores en la matriz de ids son cadenas.

over 4 years ago · Santiago Trujillo
3 Respuestas
Responde la pregunta

0

Debido a que los números son los ID de los registros, simplemente puede usar:

 ids = ["4", "15", "10", "20", "1"] stores = Store.find(ids)

Esto funciona porque find también acepta una lista de ID y, cuando se proporciona una lista, find devolverá los registros en el mismo orden que en la lista.

Y en Ruby on Rails 7.0 podrá usar where en combinación con in_order_of que tiene la ventaja de no generar un error si no se encuentra un registro y que también puede ordenar por otras columnas y sus valores:

 ids = ["4", "15", "10", "20", "1"] stores = Store.where(id: ids).in_order_of(:id, ids)
over 4 years ago · Santiago Trujillo Denunciar

0

Al realizar una consulta where(id: ids) , la base de datos simplemente ejecuta una consulta que limita los resultados a esos ID. La base de datos no devolverá los resultados según el orden de los identificadores que le proporcione, pero puede ordenar explícitamente los resultados de la base de datos por id (o cualquier otro atributo) con where(id: ids).order('id desc') para volver en orden decreciente por id. Otra opción que puede usar ActiveRecord#find con múltiples identificaciones y devolverá los resultados en el orden en que los solicite:

 Store.published.find(ids)

Sin embargo, where ignorará silenciosamente cualquier identificación que no se encuentre, mientras que find fallará si falta alguna identificación pasada.

over 4 years ago · Santiago Trujillo Denunciar

0

Lo averigué. Quería seguir usando .where() para que no arrojara un error si la identificación no existía. Esta solución funcionó para mí ...

 sorted_stores = stores.sort_by { |store| ids.index(store[:id]) }
over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda