現在のセットアップでは、一部のデータを Tire Gem でスコープするカスタム SQL ステートメントを追加する必要があります。
Ruby 1.9.3でRails 3.2を使用しています
リストコントローラーには、次のものがあります。
@listings = Listing.search()
私の Listing.rb では、次のような多数のフィルターを使用して検索方法を使用しています。
def self.search(params={})
tire.search(load: true, page: params[:page], per_page: 50) do |search|
search.query { string params[:query], :default_operator => "AND" } if params[:query].present?
search.filter :range, posted_at: {lte: DateTime.now}
search.filter :term, "property.rooms_available" => params[:property_rooms_available] if params[:property_rooms_available].present?
search.filter :term, "property.user_state" => params[:property_user_state] if params[:property_user_state].present?
...
end
私がする必要があるのは、この SQL ステートメントを search メソッドに追加して、経度と緯度でスコープを設定することです。「座標」は、URL のパラメーターによって次の形式で渡されます。
http://localhost:3000/listings?coords=51.0000,-01.0000 52.0000,-02.0000
(-01.0000 と 52.0000 の間に空白があります。)
現在私は持っています:
sql = "SELECT title, properties.id, properties.lng,properties.lat from listings WHERE ST_Within(ST_GeometryFromText('POINT(' || lat || ' ' || lng || ')'),ST_GeometryFromText('POLYGON((#{coords}))'));"
私はこのようなものでコントローラ内でそれをスコープしようと考えましたか?
def self.polyed(coords)
joins(:property).
where("ST_Within(ST_GeometryFromText('POINT(' || properties.lat || ' ' || properties.lng || ')'),ST_GeometryFromText('POLYGON((#{coords}))'))").
select("title, properties.id, properties.lng,properties.lat")
end
この...
listings_controller.rb
def index
@listings = Listing.polyed(poly_coordinates).search()
end
結果を HTML および json 形式で @listings として返す必要があります。
http://localhost:3000/listings.json?
私はすでにRABLを使用してjsonを自動的に生成しています。
これは可能ですか?
よろしくお願いします。
ライアン