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_tohas_one关系连接到您的交易?)

在文档中查看有关联接的更多信息

于 2012-06-28T17:22:52.840 回答