¿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.