で見つかった回答は解決策を提供できませんでしたので、私はこの質問をしています。私はnのレコードを特定のレコードのlonlatに返すことができるコントローラメソッドを作成しようとしています。照会しているレコードは同じテーブルからのものです。私がこれをSQLで完全に実行していた場合、このコンセプトはそれほど大きなものではありません。その多くがリンクされている例では明らかであり、以下に私は結果を得られる特定のケースである:ご注文はお近くのPostGIS、RGeo、Spatial Adapter
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