0

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

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

我怎么能去建造这个?不是加盟所以...

谢谢!

4

1 回答 1

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})
于 2015-09-10T03:08:45.227 回答