我在問這個問題,因爲我在找到的答案無法提供解決方案。我試圖創建一個控制器方法,可以將最接近的記錄返回到某個記錄的lonlat。它所查詢的記錄來自同一張表。如果我完全在SQL中完成這個概念,那麼這個概念並不是很大。這一點是在鏈接的例子清楚,下面是我獲得的結果的具體情況:通過最近使用PostGIS,RGeo,Spatial Adaptor排序
condos_development=#
SELECT id, name FROM condos
ORDER BY ST_Distance(condos.lonlat, ST_PointFromText('POINT(-71.06 42.45)'))
condos_development-#
LIMIT 5;
我的問題是在使用ActiveRecord這項工作。我使用的方法受@ dc10響應的啓發,但我無法通過RGeo方法或直接SQL創建工作查詢。這是我到目前爲止有:
def find_closest_condos(num, unit)
result = Condo.order('ST_Distance(condos.lonlat, ST_PointFromText("#{unit.lonlat.as_text)}")')
.limit(5)
end
從這一嘗試的迴應如下:
ActiveRecord::StatementInvalid: PG::SyntaxError: ERROR: syntax error at or near "LIMIT" 10:29:50 rails.1 LINE 1: ...lonlat, ST_PointFromText("#{unit.lonlat.as_text)}") LIMIT $1
會有人可以把我對如何把這項工作查詢在一起,使正確的軌道上我可以使它在Rails中工作?
好像解決方案就是將''#{unit.lonlat.as_text}}''改爲'「#{unit.lonlat.as_text}」' –
是的。這是正確的。 – brianbancroft