Rails Geocoder "неопределенная ошибка метода" - PullRequest
1 голос
/ 23 октября 2011

Еще один настоящий новичок на Руби, так что, пожалуйста, будьте осторожны ... Я работаю с геокодером alexreisner на рельсах 3.0 и не могу вызвать методы из библиотеки Geocoder :: Results. Я изучил документацию по Geocoder, но я не могу выполнить одну простую вещь: вытащить результат «состояния» из предоставленного пользователем адреса. Поэтому включите «123 Fake Street, San Francisco, CA» в «CA» или «California».

(В настоящее время моя программа будет использовать информацию о «состоянии» только для определения результатов, но я хотел бы иметь полную информацию об адресе, которую можно будет использовать позже, когда я буду дорабатывать приложение, поэтому я запрашиваю полный адрес.)

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

class Project < ActiveRecord::Base                    
  attr_accessible :title, :address, :latitude, :longitude     

  belongs_to :user 

  geocoded_by :address
  after_validation :fetch_coordinates

  reverse_geocoded_by :latitude, :longitude do |obj, geo| 
    obj.state = geo.state
    obj.country_code = geo.country_code
    obj.address = [geo.state, geo.country_code].join(",")
  end
  after_validation :reverse_geocode  

end

Но это приводит к «неопределенному методу ошибки» для штата, кода страны и адреса. Я не понимаю, потому что документация к гему Geocoder четко предоставляет эти методы. Моя модель просто не может получить к ним доступ. (Кстати, моя модель способна получить широту и долготу с введенного адреса, поэтому кажется, что Geocoder настроен правильно. И метод "geocoded_by" работает отлично. Кроме того, он правильно настроен на Google API).

Я почти уверен, что здесь что-то упущено. В консоли rails я даже могу использовать Geocoder.search ("Miami, FL") и извлекать всю информацию о округе, штате и городе, но я просто не могу извлечь "штат" через мою модель.

Спасибо за любую помощь!

Ответы [ 2 ]

6 голосов
/ 08 марта 2012

Убедитесь, что вы перезапустите сервер rails. Я столкнулся с ситуацией, когда геокодирование отлично работало в консоли rails, но дало мне undefined method 'geocoded_by' в моем приложении. Похоже, что это не ваша причина, чтобы получить ту же ошибку, но это была моя.

1 голос
/ 23 октября 2011

Если вы посмотрите на примеры на сайте Geocoder, вы увидите, что второе значение, переданное блоку, похоже, является массивом или какой-либо другой формой сбора, поэтому вы не можете напрямую вызывать методы для него.Вместо этого сначала нужно вытащить из него нужный объект:

reverse_geocoded_by :lat, :lon do |obj,results|
  if geo = results.first
    obj.city    = geo.city
    obj.zipcode = geo.postal_code
    obj.country = geo.country_code
  end
end
...