Геокодирование 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
Модель выполняет геокодирование по начальному адресу при создании, затем после создания (например, геокодирование было выполнено по начальному адресу и у вас есть действительный начальный адрес), выполните геокодирование по конечному адресу с помощью отдельного обратного вызова.