Rails + Geocoder: неопределенный метод поиска для Geokit::Geocoders::Geocoder:Class

Я играю с geocoder, я добавил этот код в модель user

  include GeoKit::Geocoders

  geocoded_by :full_street_address   # can also be an IP address
  after_validation :geocode          # auto-fetch coordinates

и в другом контроллере, в CarController#index я вызываю:

zip_code = '94301'
aaa = Geocoder.search(zip_code).first.coordinates
puts '==='
puts aaa.inspect
puts '==='

Но вместо

s[0].latitude   # =>    37.4457966
s[0].longitude  # =>    -122.1575745
s[0].address    # =>    "Palo Alto, CA 94301, USA"

я получил

undefined method `search' for Geokit::Geocoders::Geocoder:Class

Что не так с настройкой геокодера?


person user984621    schedule 11.09.2013    source источник


Ответы (1)


Я думаю, что это просто проблема с пространством имен. Вам нужно удалить include GeoKit::Geocoders. Я просмотрел исходный код geocoder и ничего не нашел.

$ pwd
/usr/local/rvm/gems/ruby-2.0.0-p247/gems/geocoder-1.1.8/lib
$ find . | xargs grep -i GeoKit
$

Итак, я погуглил, и оказалось, что есть еще одна жемчужина под названием geokit. Упомянутое вами пространство имен разрешается в этом геме в строке 92< /а>. И этот класс GeoCoder явно не имеет метода поиска. Поэтому я подозреваю, что у вас есть ссылка на geokit в вашем Gemfile.

И, кстати, я использую только геокодер, и он отлично работает в моей среде -

$ rails console
Loading development environment (Rails 4.0.0)
2.0.0-p247 :001 > zip_code = '94301'
 => "94301"
2.0.0-p247 :002 > aaa = Geocoder.search(zip_code).first.coordinates
 => [37.4457966, -122.1575745]
2.0.0-p247 :003 >
person saihgala    schedule 11.09.2013
comment
Да, ты был прав. В системе были фрагменты старого кода, содержащего гем geokit. Большое спасибо! - person user984621; 11.09.2013