了解活动记录查询

时间:2018-09-14 03:56:16

标签: ruby-on-rails ruby postgresql ruby-on-rails-5 rails-activerecord

我需要为我正在研究的项目做一些复杂的子查询。我不知道如何在简单的活动记录中做到这一点。我尝试了几件事,最终选择使用

进行通用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将几何转换为Point。如果我要在ActiveRecord查询中执行此操作,该怎么办?在ActiveRecord中甚至可以进行这种查询吗?

1 个答案:

答案 0 :(得分:4)

ActiveRecord不会为您提供任何幻想。您可以执行简单的操作,但是当需要复杂的查询时,只需像以前一样使用纯SQL。

您可以选中Arel,这可能会给您带来更大的灵活性。但是,最后,我认为这不值得-它不会像本机查询那样有效。

使用ORM做简单的事情。用普通的SQL处理复杂的事情。