Order by Nearest - PostGIS、GeoRuby、spatial_adapter で見つけた回答が解決策を提供できなかったため、この質問をしています。特定のレコードの lonlat に最も近いn 個のレコードを返すことができるコントローラー メソッドを作成しようとしています。クエリ対象のレコードは同じテーブルからのものです。これを完全に 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: エラー: "LIMIT" 10:29:50 rails.1 付近で構文エラーが発生しました LINE 1: ...lonlat, ST_PointFromText("#{unit.lonlat.as_text)}")リミット $1
Railsで動作するように、この作業クエリをまとめる方法について、誰かが私を正しい軌道に乗せることができますか?