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

282
Vistas
Redacción programática de consultas INTERSECT y UNION con Arel o ActiveRecord

Necesito escribir una consulta, usando Arel o ActiveRecord, en Rails 5, usando intersecciones y uniones. Cada respuesta sobre SO que he encontrado hasta ahora sobre esto generalmente parece implicar la transformación del ejemplo particular que da el OP en otro tipo de consulta. Esto no funcionará para mí, ya que estas consultas se componen mediante programación y, con mucho, la forma más sensata de hacerlo es como subconsultas que luego se unen con INTERSECT y UNION.

Intersección con & y unión con | funciona totalmente y hace lo que quiero que haga, pero ambos devuelven matrices y, por lo tanto, traerán un enorme, enorme, enorme conjunto de datos a la memoria sin una buena razón.

 MyModel.where(...).intersect(MyModel.where(...))

Este tipo de obras, pero el resultado es un Arel::Nodes::Intersect en lugar de un ActiveRecord::Relation , que no es tan útil. Intenté crearlos usando Arel directamente, pero me frustró la falta de documentación de Arel.

¿Hay una forma más Railsy de lograr esto que todavía se pueda encadenar (es decir, todavía se puede paginar perezosamente como una AR::Relation)?

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

0

Para INTERSECT, solo usa:

 MyModel.where(...).where(...)

o puede ser una sintaxis más agradable ponerlo en varias líneas así:

 MyModel\ .where(...) .where(...)

También puede usar where(nil), no tendrá efecto en la relación. Esto es útil cuando está construyendo programáticamente las condiciones where (por ejemplo where({a: a_val} if a_val.present? ).

Para UNION, use Rails 5 or :

 MyModel.where(...).or(MyModel.where(...))

o con sintaxis multilínea:

 MyModel\ .where(...) .or( MyModel\ .where(...) )
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