Rails内部连接与地理编码gem相结合

我有2个相关的导轨型号

class Location < ActiveRecord::Base has_many :rates geocoded_by .... end class Rate < ActiveRecord::Base belongs_to :location end 

我正在使用地理编码器gem – http://www.rubygeocoder.com

我想找到具有特定pair属性的所有费率,这些属性与用户在一定距离内。

在SQL中,我会对费率进行内部联接

 SELECT * FROM rates INNER JOIN locations ON rates.location_id=locations.id; 

然后,插入where条件以对pair属性进行过滤,然后在结果表上使用Geocoder的near方法(near方法通过在查询中插入where条件来计算距离,使用位置上的纬度和经度属性)到只选择正确距离内的行

我怎么能在rails中做到这一点? 我试过了

 rates = Rate.joins(:locations) 

我明白了

 ActiveRecord::ConfigurationError: Association named 'locations' was not found; perhaps you misspelled it? 

我想做这个

 rates = Rate.joins(:locations).near(my_latitude, my_longitude, distance).where(:rates => {:pair => 'xxxx'}) 

但我明白了

 undefined method `near' for # 

 near = Location.near(location, radius) Rate.includes(:location).references(:location).merge(near) 

这可以与其他位置或速率范围链接

我知道这是一个旧的,但仍然没有回答,无处:)

我遇到了同样的问题,然后偶然发现地理编码器文档中的一些信息,它说为了使外连接工作(在rails中完成包含),你应该结合使用join:选择并为我做了(我需要在特定位置找到用户的所有产品)。

所以,从我的头脑中,这可能适用于您的情况:

 rates = Location.near(my_latitude, my_longitude, distance, :select => "rates.*").joins(:locations).where(:rates => {:pair => 'xxxx'}) 

我希望这有帮助。