我问这个问题,因为我在Order by nearest - PostGIS, GeoRuby, spatial_adapter找到的答案无法提供解决方案。我正在尝试创建一个控制器方法,可以将 n 最近的记录返回到某个记录的lonlat。它查询的记录来自同一个表。如果我在SQL中完全这样做,这个概念就不是那么大了。在链接的示例中很清楚,下面是我获得结果的具体情况:
<receiver android:name="broadcastReceiver.MessageServiceTrigger"
android:process=":remote" />
我的问题在于使用ActiveRecord。我正在使用受@ dc10响应启发的方法,但我无法通过RGeo方法或直接SQL创建工作查询。这是我到目前为止所做的:
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 :: StatementInvalid:PG :: SyntaxError:ERROR:语法错误 在“LIMIT”或其附近10:29:50 rails.1 LINE 1:... lonlat, ST_PointFromText(“#{unit.lonlat.as_text)}”)LIMIT $ 1
是否有人能够让我在如何将此工作查询放在一起的正确轨道上,以便我可以在Rails中使其工作?
答案 0 :(得分:2)
问题在于活动记录如何将您的查询解析为SQL,以及Limit子句的位置。如果您将查询更改为:
Condo.order("ST_Distance(lonlat, ST_GeomFromText('#{unit.lonlat.as_text}', 4326))")
.limit(num)
你应该会发现这个有效。