Geocoder“.near”与mongoId无法合作

时间:2015-01-17 20:41:36

标签: ruby-on-rails mongodb google-maps mongoid rails-geocoder

我正在使用Geocoder gem找到附近位置并在谷歌地图中找到它。

发布模式

class Posting
  include Mongoid::Document
  include Geocoder::Model::Mongoid


  field :id
  field :title
  field :coordinates, :type => Array
  field :address

  after_validation :reverse_geocode_address


  index({ location: "2dsphere" }, { min: -200, max: 200 })

  belongs_to :user

  def reverse_geocode_address
    self.coordinates = Geocoder.coordinates(self.address)
  end
end

当我查询

Posting.near("chennai",20)
ArgumentError: wrong number of arguments (2 for 0..1)
.../ruby-2.0.0-preview2/gems/origin-2.1.1/lib/origin/selectable.rb:334:in `near'

我能理解,它的调用"附近"功能在" selectable.rb" (mongoid' s)而不是Geocoder的范围。

我在这里做错了什么?如何使用地理编码器获得结果。

我正在使用以下版本

MongoDB:db version v2.6.3

MongoID:mongoid(4.0.0)

GEOCoder:geocoder(1.2.6)

1 个答案:

答案 0 :(得分:1)

遇到与你相同的问题。
将这颗宝石直接用于制作mongoid。

class Localizable

  include Mongoid::Document

  field :coordinates,           type: Array,  default: nil
  index({ coordinates: "2d" },  { min: -180, max: 180 })

  validates_presence_of :coordinates

  ## returns localizables matching params
  #
  # @param la [Float] latitude
  # @param lo [Float] longitude
  # @param ra [Float] range in km
  # @return [Mongoid]
  def self.at_range(la, lo, ra)
    geo_near([la, lo]).max_distance(ra.fdiv(111.12))
  end

  def latitude
    coordinates[0]
  end

  def longitude
    coordinates[1]
  end
end

Localizable.at_range(48, 2, 10) => []