2015-03-13 33 views
0

下面的查詢運行正常爲原料SQL,而是因爲它擊中2個款,我不知道如何在活動記錄構建它...RGeo PostGIS的多表查詢

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

我怎麼能去關於構建這個?這不是一個加入所以...

謝謝!

+0

我不做紅寶石因此不能對此發表評論,但你不需要&&。這已經在ST_Contains中暗示,它首先檢查邊界框遏制。 – 2015-03-14 09:38:27

+1

這是一個連接,只是一個隱含的連接。 – 2015-03-15 00:16:35

回答

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})