ruby-on-rails - 了解活动记录查询
问题描述
我需要为我正在处理的项目做一些复杂的子查询。我无法弄清楚如何在普通的活动记录中做到这一点。我尝试了几件事,最终选择使用通用 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 中甚至可以进行这种类型的查询吗?
解决方案
ActiveRecord 不会为您提供任何花哨的东西。您可以执行简单的操作,但是当需要进行复杂查询时,您只需使用普通 SQL 即可。
您可以检查Arel这可能会给您更多的灵活性。但是,最后,我认为这不值得——它不会像原生查询那样有效。
用 ORM 做简单的事情。用简单的 SQL 做复杂的事情。
推荐阅读
- java - 在准备好的语句中将负 java long 转换为 clickhouse Uint64
- python - PIL 和 python 静态类型
- python - 如何进一步优化具有tensorflow + opencv + pyrealsense2的python代码
- airflow - 气流:为 TriggerDagRunOperator 设置自定义 run_id
- ios - 是否可以将扩展图像从项目更改为 UIImageView?
- c# - 列表中的行单元格值
- oracle - 在哪里可以找到 cognos 11.1 报告的执行查询?
- reactjs - 我收到错误:操作必须是普通对象。使用自定义中间件进行异步操作
- latex - Sphinx latexpdf 忽略文件的一部分
- cmake - CMake 查找 Intel C++、Fortran,但不查找 C、ar、ld