我需要为我正在研究的项目做一些复杂的子查询。我不知道如何在简单的活动记录中做到这一点。我尝试了几件事,最终选择使用
进行通用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中甚至可以进行这种查询吗?
答案 0 :(得分:4)
ActiveRecord不会为您提供任何幻想。您可以执行简单的操作,但是当需要复杂的查询时,只需像以前一样使用纯SQL。
您可以选中Arel,这可能会给您带来更大的灵活性。但是,最后,我认为这不值得-它不会像本机查询那样有效。
使用ORM做简单的事情。用普通的SQL处理复杂的事情。