Геокодирование Rails допускает только один атрибут?

Я пытаюсь получить значения широты и долготы для двух разных значений. Они установлены в атрибутах start а также end в моей модели Пробег.

geocoded_by :end, :latitude  => :latitude, :longitude => :longitude
geocoded_by :start, :latitude  => :start_lat, :longitude => :start_lon

У меня есть следующие атрибуты в моей модели Пробег:

start
start_lat
start_long
end
latitude
longitude

В зависимости от того geocoded_by линия находится вверху модели Пробег, только один из атрибутов геокодируется. Есть ли способ заставить оба атрибута обрабатываться гемом геокодера?

2 ответа

Решение

Краткий ответ: нет.

Но это не трудно свернуть свое собственное решение. В основном geocoded_by: устанавливает простой способ геокодировать адрес lat/long из обратного вызова с несколькими опциями (имя столбца lat/long и т. Д.).

Есть полезный метод для поиска широты / долготы адреса:

Geocoder.coordinates(the_start_address)
     => [42.700149, -74.922767]

так что вы можете использовать geocoded_by: метод для обработки конца lat/long в вашем примере, а затем сделать что-то вроде

before_save :geocode_the_start_address

def geocode_the_start_address
  coords = Geocoder.coordinates(self.start)
  self.start_lat = coords[0]
  self.start_long = coords[1]
end

Честно говоря, я бы назвал вещи более последовательно - start_address, end_address, start_lat, start_long и т. Д. И я бы также использовал собственный метод для геокодирования начального и конечного адреса вместо geocoded_by, чтобы код был более согласованным.

Я согласен с Джоном Полом, но я бы сделал это в after_save - так что, в основном, ваш Milage Модель выполняет геокодирование по начальному адресу при создании, затем после создания (например, геокодирование было выполнено по начальному адресу и у вас есть действительный начальный адрес), выполните геокодирование по конечному адресу с помощью отдельного обратного вызова.

Другие вопросы по тегам