PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

SELECT aninhado do ActiveRecord


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