Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ruby-on-rails-3/4.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 3 Rails-连接城市表的现有查询中的附近城市_Ruby On Rails 3_Join - Fatal编程技术网

Ruby on rails 3 Rails-连接城市表的现有查询中的附近城市

Ruby on rails 3 Rails-连接城市表的现有查询中的附近城市,ruby-on-rails-3,join,Ruby On Rails 3,Join,我有以下型号: class User has_one :player belongs_to :city end class Player belongs_to :user end class City has_many :users end 每个城市都有纬度和经度属性 我有下面的查询(稍微长一点,但重要的是城市部分),我用它来获取来自特定城市的关联用户。因此: def self.search(city) self.includes(:user => :city). w

我有以下型号:

class User
 has_one :player
 belongs_to :city
end

class Player
 belongs_to :user
end

class City
 has_many :users
end
每个城市都有纬度经度属性

我有下面的查询(稍微长一点,但重要的是城市部分),我用它来获取来自特定城市的关联用户。因此:

def self.search(city)
  self.includes(:user => :city).
  where(['cities.name = ?', city])
end
我将如何更改此查询以获取给定城市附近(例如10公里)的相关城市的用户

编辑:我在城市模型中使用了这种方法,它给出了给定特定半径(以公里为单位)、纬度和经度的最近城市:

  def near_by(latitude,longitude,radius)
    City.select("cities.*,
                6371 *
                acos(cos(radians(#{latitude})) *
                cos(radians(cities.latitude)) *
                cos(radians(cities.longitude) - radians(#{longitude})) +
                sin(radians(#{latitude}))*sin(radians(cities.latitude)))
                AS km_away").group('km_away ASC').having('km_away <= ?', radius)
  end

但这是一个好办法吗?如果是这样的话,我怎样才能让教授们按所经过的城市的距离排序呢?

对于地理数据的处理,我建议您查看本文中描述的

自述文件: 使用地理编码对象,您可以执行以下操作:

obj.nearbys(30)                      # other objects within 30 miles
obj.distance_from([40.714,-100.234]) # distance from arbitrary point to object
obj.bearing_to("Paris, France")      # direction from object to arbitrary point

要使用地理数据,我建议您按照本文所述查看

自述文件: 使用地理编码对象,您可以执行以下操作:

obj.nearbys(30)                      # other objects within 30 miles
obj.distance_from([40.714,-100.234]) # distance from arbitrary point to object
obj.bearing_to("Paris, France")      # direction from object to arbitrary point

我认为这更像是一个评论而不是一个答案…但无论如何,谢谢。我认为这更像是一个评论而不是一个答案…但无论如何,谢谢。