Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

482
Views
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 answers
Answer question

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 Report

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 Report

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!