Ваш вопрос немного неясен, но если вы просто ищете управляемый и программный способ генерации этого запроса, вы можете выполнить этот поиск с помощью arel
следующим образом
rp_table = Regionpolygon.arel_table
destination_table = Destination.arel_table
query = rp_table.project(rp_table[:id],
rp_table[:area_name],
destination_table[:id].as('destination_id')
).join(destination_table).on(
Arel::Nodes::NamedFunction.new('ST_Intersects',
[rp_table[:polygon_area], destination_table[:latlon]]
)
).where(rp_table[:nation_id].eq(74))
Это приведет кследующий SQL
SELECT
[regionpolygons].[id],
[regionpolygons].[area_name],
[destinations].[id] AS destination_id
FROM
[regionpolygons]
INNER JOIN [destinations] ON
ST_Intersects([regionpolygons].[polygon_area], [destinations].[latlon])
WHERE
[regionpolygons].[nation_id] = 74
Вы можете преобразовать query
в SQL, буквально вызвав to_sql
.Итак:
ActiveRecord::Base.connection.exec_query(query.to_sql).to_hash
Вернет Array
найденных строк, выполняя вышеуказанное, где строки конвертируются в хэши.Этот хеш будет выглядеть так:
{"id" => 1, "area_name" => "area_name", "destination_id" => 1}