Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/194.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 轨道内部连接与地理编码gem相结合_Ruby On Rails_Geocoding - Fatal编程技术网

Ruby on rails 轨道内部连接与地理编码gem相结合

Ruby on rails 轨道内部连接与地理编码gem相结合,ruby-on-rails,geocoding,Ruby On Rails,Geocoding,我有两个相关的rails模型 class Location < ActiveRecord::Base has_many :rates geocoded_by .... end class Rate < ActiveRecord::Base belongs_to :location end 然后,在pair属性上插入要过滤的where条件,然后在结果表上使用地理编码器的near方法near方法将where条件插入查询中,该查询使用位置上的纬度和经度属性计算距离,以仅选择正

我有两个相关的rails模型

class Location < ActiveRecord::Base
  has_many :rates
  geocoded_by ....
end

class Rate < ActiveRecord::Base
 belongs_to :location
end
然后,在pair属性上插入要过滤的where条件,然后在结果表上使用地理编码器的near方法near方法将where条件插入查询中,该查询使用位置上的纬度和经度属性计算距离,以仅选择正确距离内的行

如何在rails中执行此操作?我试过了

rates = Rate.joins(:locations)
我明白了

我想这样做

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

undefined method `near' for #<ActiveRecord::Relation:0xa075ff8>

我知道这是一个老问题,但仍然没有回答,没有任何地方:

我遇到了同样的问题,然后偶然发现了一个小信息,其中说为了使rails中的外部连接工作与includes一起完成,您应该将join与:select结合使用,这为我做到了,我需要从特定位置的用户处查找所有产品

因此,从我的头脑来看,这可能适用于你的情况:

rates = Location.near(my_latitude, my_longitude, distance, :select => "rates.*").joins(:locations).where(:rates => {:pair => 'xxxx'})
我希望这有帮助

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

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

,因为它属于,我认为:位置需要是单一的。不确定这是否有效,但您可能需要稍微重新安排方法调用的顺序。取决于宝石如何与阿雷尔合作。Rate.nearmy_latitude,my_latitude,distance.join:location.where:rates=>{:pair=>'xxxx'}此解决方案会产生很多问题:无法使用作用域,部分不起作用,因为Rails尝试呈现位置而不是速率,等等。
rates = Location.near(my_latitude, my_longitude, distance, :select => "rates.*").joins(:locations).where(:rates => {:pair => 'xxxx'})
near = Location.near(location, radius)
Rate.includes(:location).references(:location).merge(near)