我问这个问题是因为我在按最近排序 - PostGIS、GeoRuby、spatial_adapter中找到的答案无法提供解决方案。我正在尝试创建一个控制器方法,该方法可以将n 个最接近的记录返回到某个记录的 lonlat。它查询的记录来自同一个表。如果我完全在 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 进行这项工作。我正在使用一种受@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: 在“LIMIT”或附近出现语法错误 10:29:50 rails.1 LINE 1: ...lonlat, ST_PointFromText("#{unit.lonlat.as_text)}")限价 1 美元
有人可以让我在如何将这个工作查询放在一起的正确轨道上,以便我可以让它在 Rails 中工作吗?