首页 > 解决方案 > 了解活动记录查询

问题描述

我需要为我正在处理的项目做一些复杂的子查询。我无法弄清楚如何在普通的活动记录中做到这一点。我尝试了几件事,最终选择使用通用 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 中甚至可以进行这种类型的查询吗?

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

解决方案


ActiveRecord 不会为您提供任何花哨的东西。您可以执行简单的操作,但是当需要进行复杂查询时,您只需使用普通 SQL 即可。

您可以检查Arel这可能会给您更多的灵活性。但是,最后,我认为这不值得——它不会像原生查询那样有效。

用 ORM 做简单的事情。用简单的 SQL 做复杂的事情。


推荐阅读