Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/63.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
Sql 查找所有Obj谁';s的交付半径在地理编码地址内_Sql_Ruby On Rails_Ruby_Activerecord_Rails Geocoder - Fatal编程技术网

Sql 查找所有Obj谁';s的交付半径在地理编码地址内

Sql 查找所有Obj谁';s的交付半径在地理编码地址内,sql,ruby-on-rails,ruby,activerecord,rails-geocoder,Sql,Ruby On Rails,Ruby,Activerecord,Rails Geocoder,我在Rails应用程序中编写了一个函数,它没有通过气味测试,我不确定如何重构 目前,用户可以在表单中输入地址,我的目标是吐出给定交付半径内的任何交付公司。现在看起来是这样的: class Dealers < ActiveRecord::Base validates :name, presence: true validates :delivery_radius, numericality: { only_integer: true } end @dealers = Deale

我在Rails应用程序中编写了一个函数,它没有通过气味测试,我不确定如何重构

目前,用户可以在表单中输入地址,我的目标是吐出给定交付半径内的任何交付公司。现在看起来是这样的:

class Dealers < ActiveRecord::Base
  validates :name, presence: true
  validates :delivery_radius, numericality: { only_integer: true }
end
  @dealers = Dealer.available_deliveries(Geocoder.coordinates(search_params))
  def self.available_deliveries(geo)
    dealers = []
    Dealer.all.each do |dealer|
      if dealer.distance_from(geo) <= dealer.delivery_radius
        dealers << dealer
      end
    end
    dealers
  end
搜索参数
仅限于街道、城市和州

我的
Dealer#available_deliveries
方法如下所示:

class Dealers < ActiveRecord::Base
  validates :name, presence: true
  validates :delivery_radius, numericality: { only_integer: true }
end
  @dealers = Dealer.available_deliveries(Geocoder.coordinates(search_params))
  def self.available_deliveries(geo)
    dealers = []
    Dealer.all.each do |dealer|
      if dealer.distance_from(geo) <= dealer.delivery_radius
        dealers << dealer
      end
    end
    dealers
  end
def自身可用交付(geo)
经销商=[]
经销商。所有人。每个人都做|经销商|

如果dealer.distance_from(geo)取决于您的后台数据库,我建议您根据地理空间距离使用其索引功能

:

在半径范围内查找记录 这些扩展提供的另一个重要功能是
接地盒(lltoearth($latlngcube),$radiusintres)
此功能允许 我们将执行一个简单的比较,以查找某个特定区域中的所有记录 半径这是通过函数返回大圆来完成的 点之间的距离,更详细的解释位于

这可以用来显示我们当前城市的所有事件

此类查询的一个示例:

SELECT events.id, events.name FROM events WHERE earth_box( {current_user_lat}, {current_user_lng}, {radius_in_metres}) @>
地对地(events.lat、events.lng)

:

我们使用
double
来存储
纬度
经度
。此外,我们 预计算(通过触发器)在以下情况下可预计算的所有值: 只看一点。我目前无法访问 我们正在使用的公式,将在稍后添加。这是一个优化的解决方案 最佳速度/精度平衡


距离是什么样子?Hi@uhn nohn
distance\u from
是一种地理编码器方法,它可以做到这一点:
obj.distance\u from([40.714,-100.234])任意点到物体的距离