0

私は、それ自体が緯度と経度を持っている場所を持つモデルを持っています。私が欲しいのは、緯度/経度が特定の地域内にあるディールなので、これを試しました:

boundary = self.user.boundary
max_lat, max_lng = boundary.max_coords.latitude, boundary.max_coords.lng
min_lat, min_lng = boundary.min_coords.latitude, boundary.min_coords.lng
lat, long = self.user.location.latitude, self.user.location.longitude
self.all_deals =  Deal.where('location.latitude <= ? AND location.latitude >= ? AND location.longitude <= ? AND location.longitude >= ?', max_lat, min_lat, max_lng, min_lng).limit(10)

SQLは、列'location.latitude'がないという例外を発生させます。ActiveRecord(推奨)または生のSQLを使用して同じことを書くにはどうすればよいですか?

4

1 に答える 1

0

このクエリの結合がありません。

使用できるようにするlocationには、クエリを書き直す必要があります。

self.all_deals =  Deal.joins(:location).where('location.latitude <= ? AND location.latitude >= ? AND location.longitude <= ? AND location.longitude >= ?', max_lat, min_lat, max_lng, min_lng).limit(10)

生成されたSQLを見ると、に結合が含まれているはずdeal.location_idです。(私は、場所が、belongs_toまたはhas_one関係を通じてあなたの取引に接続されている参照モデルであると想定していますか?)

ドキュメントで結合の詳細を参照してください

于 2012-06-28T17:22:52.840 に答える