sql >> Base de Datos >  >> RDS >> PostgreSQL

ActiveRecord anidado SELECT

¿Por qué concatenas en lugar de seleccionar según el nombre y el apellido? La subselección tendrá mucho menos rendimiento que la consulta directa. Puede obtener el nombre completo usando select alcance (será accesible de la misma manera que otros atributos):

 Candidate.select("candidates.*, (first_name || ' ' || last_name) AS full_name").
           where(first_name: 'Antonov', last_name: 'Kolganov')

Actualización: Si realmente necesita reescribir la consulta anterior con una subselección en FROM cláusula a ActiveRecord, puede hacer lo siguiente:

Candidate.from("(SELECT (candidates.first_name || ' ' || candidates.last_name) AS full_name, candidates.* FROM candidates) candidates").
          where(full_name: 'Anton Kolganov')

Es decir, en general, puede colocar cualquier SQL válido en los métodos de alcance de ActiveRecord, incluido select , from , etc.