Tại sao bạn ghép thay vì chọn dựa trên họ và tên? Lựa chọn con sẽ kém hiệu suất hơn nhiều so với truy vấn trực tiếp. Bạn có thể lấy tên đầy đủ bằng cách sử dụng select
phạm vi (nó sẽ có thể truy cập theo cách tương tự như các thuộc tính khác):
Candidate.select("candidates.*, (first_name || ' ' || last_name) AS full_name").
where(first_name: 'Antonov', last_name: 'Kolganov')
Cập nhật: Nếu bạn thực sự cần viết lại truy vấn trên bằng một lựa chọn con trong FROM
mệnh đề ActiveRecord, bạn có thể làm như sau:
Candidate.from("(SELECT (candidates.first_name || ' ' || candidates.last_name) AS full_name, candidates.* FROM candidates) candidates").
where(full_name: 'Anton Kolganov')
Tức là, nói chung, bạn có thể đặt bất kỳ SQL hợp lệ nào vào các phương thức phạm vi ActiveRecord, bao gồm select
, from
, v.v.