Как заставить Gmaps4Rails работать с MongoMapper

Во-первых, этот драгоценный камень выглядит потрясающе — спасибо @apneadiving. Я надеюсь, что когда-нибудь смогу внести свой вклад - как только я выясню, как правильно его использовать :-\

Боюсь, это ужасный вопрос новичка... и я знаю, что смогу понять его, основываясь исключительно на Ruby-измах... Но мне не удалось понять, что я делаю неправильно...

Я не могу пройти мимо этой ошибки:

NoMethodError (undefined method `gmaps4rails_options' for <WaterSupply>...

Я исследовал много разных способов кодирования координат, но ошибка, как мне кажется, просто в том, что acts_as_gmappable почему-то не "работает". Моя модель такова:

class WaterSupply
  include Gmaps4rails::ActsAsGmappable
  include MongoMapper::Document

  acts_as_gmappable :process_geocoding => false

  ensure_index [[:loc, '2d']]

  def initialize
    puts Gmaps4rails::ActsAsGmappable.inspect
    puts "*"*50
  end

  key :name, String, :required => true

  # TODO break this address/geo stuff out into a separate Location class
  key :loc, GeoPoint, :default => [40.34962381,-74.75102367]
  key :gmaps, Boolean
  key :address, String
  key :city, String
  key :zip, String
  key :country, String

  def gmaps4rails_address
      "#{self.address}, #{self.zip} #{self.city}, #{self.country}"
  end
end

Любая помощь будет оценена по достоинству. Я могу получить пустую карту, просто ничего с данными экземпляра модели :-p

Как только все заработает, я добавлю сообщение в блог или вики-страницу для использования MongoMapper и Gmaps4Rails!


person Jon Kern    schedule 05.09.2011    source источник
comment
какое полное сообщение об ошибке?   -  person apneadiving    schedule 06.09.2011
comment
@apneadiving Больше ничего... NoMethodError (неопределенный метод gmaps4rails_options' for #<WaterSupply:0x00000102a76040>): app/controllers/water_supplies_controller.rb:86:in map'   -  person Jon Kern    schedule 06.09.2011


Ответы (1)


У меня есть пример работы с MongoMapper здесь

Класс модели выглядит так:

class WaterSupply
  include MongoMapper::Document
  include Gmaps4rails::ActsAsGmappable
  acts_as_gmappable :lat => 'latitude', :lon => 'longitude', :process_geocoding => true,
                    :check_process => :prevent_geocoding,
                    :address => "address", :normalized_address => "address"
                    #:msg => "Sorry, not even Google could figure out where that is"

  key :name, String
  key :address, String
  key :street, String
  key :zip, String
  key :city, String
  key :state, String
  key :country, String
  key :latitude, Float
  key :longitude, Float
  key :gps, GeoPoint  # lat, lon; e.g., [40.34962381,-74.75102367]
  key :gmaps, Boolean

  ensure_index [[:gps, "2d"]]

  before_save :store_geo

  def store_geo
    self.gps = [self.latitude, self.longitude]
  end

  def prevent_geocoding
    address.blank? || (!latitude.blank? && !longitude.blank?)
  end
  def gmaps4rails_address
    "#{self.street}, #{self.city}, #{self.state} #{self.zip} #{self.country}"
  end
  #def gmaps4rails_infowindow
  #  "#{self.name} #{self.gps}"
  #end
  def gmaps4rails_title
    "#{self.name}"
  end

  def gmaps4rails_sidebar
    "#{self.name} #{self.gps}"
  end

end
person Jon Kern    schedule 03.10.2011
comment
Разве переход от индексированного значения местоположения в монго к 2 ключам для широты и долготы не теряет преимущества возможности выполнять геопоиск в монго? - person Nick; 30.03.2012
comment
@Nick - я обновил пример до того, что использую сейчас (мне все еще нужно узнать больше). И да, вы правы, геоиндексация — это ключевая функция, которой можно воспользоваться в MongoDB. - person Jon Kern; 01.04.2012