Здесь нужно решить две проблемы.
Первый использует функцию SQL в предложении .select
. Обычно это довольно просто - вы просто используете AS
, чтобы дать результату имя. Вот пример из ActiveRecord Rails Guide :
Order.select("date(created_at) as ordered_date, sum(price) as total_price").group("date(created_at)")
Полученные объекты Order будут иметь атрибуты ordered_date
и total_price
.
Это подводит нас ко второй проблеме, которая заключается в том, что Rails не дает нам простого способа параметризации select
(то есть использования заполнителя ?
), поэтому (насколько я могу судить) вы ' Вам нужно будет сделать это самостоятельно с помощью sanitize_sql_array
:
sql_for_select_intersection = sanitize_sql_array([
"ST_ASEWKT(ST_INTERSECTION(geometry, ?)) AS intersection",
geometry,
])
Это вернет очищенный фрагмент SQL, например ST_ASEWKT(ST_INTERSECTION(geometry, '...'))
, который затем можно использовать для указания поля в select
:
Trip.where(status: "active").select(:id, sql_for_select_intersection))
Результирующий запрос вернет объекты Trip с атрибутами id
и intersection
.