Por que você concatena em vez de selecionar com base no nome e no sobrenome? A subseleção terá muito menos desempenho do que a consulta direta. Você pode obter o nome completo usando o
select
escopo (será acessível da mesma forma que outros atributos): Candidate.select("candidates.*, (first_name || ' ' || last_name) AS full_name").
where(first_name: 'Antonov', last_name: 'Kolganov')
Atualização: Se você realmente precisa reescrever a consulta acima com uma subseleção no
FROM
cláusula para ActiveRecord, você pode fazer o seguinte:Candidate.from("(SELECT (candidates.first_name || ' ' || candidates.last_name) AS full_name, candidates.* FROM candidates) candidates").
where(full_name: 'Anton Kolganov')
Ou seja, em geral, você pode colocar qualquer SQL válido nos métodos de escopo do ActiveRecord, incluindo
select
, from
, etc