Понимание запросов активной записи - PullRequest
0 голосов
/ 14 сентября 2018

Мне нужно было сделать несколько сложных подзапросов для проекта, над которым я работаю. Я не мог понять, как сделать это в простой активной записи. Я попробовал несколько вещей и в итоге выбрал общий SQL-запрос, используя

ActiveRecord::Base.connection.exec_query(
  "
  SELECT gid as id, (dp).path, (dp).geom, ST_AsText((dp).geom),  ST_X((dp).geom) as longitude, ST_Y((dp).geom) as latitude
  FROM (
  SELECT gid, ST_DumpPoints(ST_AsText(ST_Transform(geom, 4326))) as dp
  FROM apples
  WHERE gid in (#{@object.id})
  ) AS GEO;
  "
)

Здесь я выбираю из подзапроса и преобразовываю геометрию в Точки, используя обычный postgresql. Если бы я делал это в запросах ActiveRecord, как мне это сделать? Возможен ли этот тип запроса в ActiveRecord?

1 Ответ

0 голосов
/ 14 сентября 2018

ActiveRecord не предоставляет вам ничего фантастического.Вы можете выполнять простые вещи, но когда вам нужен сложный запрос, вы просто используете простой SQL, как вы это делали.

Вы можете проверить Arel , что может дать вам больше гибкости.Но все же, в конце концов, я думаю, что это не стоит - это будет не так эффективно, как собственный запрос.

Делайте простые вещи с ORM.Делайте сложные вещи с простым SQL.

...