【问题标题】:RGeo PostGIS multi-table queryRGeo PostGIS 多表查询
【发布时间】:2015-05-16 02:16:47
【问题描述】:

以下查询作为原始 sql 运行良好,但因为它遇到 2 个模型,我不确定如何在活动记录中构造它...

sql =  "SELECT spots.*
              FROM spots, areas 
              WHERE areas.area = '#{@area.area}'
              AND shape && lonlat
              AND ST_Contains(shape,lonlat);"

我该如何构建这个?这不是一个连接所以...

谢谢!

【问题讨论】:

  • 我不使用 Ruby,因此无法对此发表评论,但您不需要 &&。 ST_Contains 中已经暗示了这一点,它首先检查边界框的包含情况。
  • 这是一个连接,只是一个隐式连接。

标签: ruby postgresql ruby-on-rails-4 postgis rgeo


【解决方案1】:

您可以通过这种方式生成同样的 SQL:

Spot.from("spots, areas")
    .where("areas.area = ?",@area.area)
    .where("shape && lonlat")
    .where("ST_Contains(shape,lonlat)")

但是这样你就没有使用 ActiveRecord 最擅长的东西,比如急切的加载和关系。 要获得相同的结果,您可以这样做:

在模型中:

Spot < ActiveRecord::Base
    belongs_to :area
end

Area < ActiveRecord::Base
end

还有查询:

Spot.joins(:area).where(areas: {area: @area.area})

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-01-15
    • 2018-11-06
    • 2015-01-08
    • 1970-01-01
    • 1970-01-01
    • 2017-05-10
    • 2020-07-01
    • 1970-01-01
    相关资源
    最近更新 更多