@weare138

Как сделать правильное исключение?

Привет! Ребят, такой вопрос: использую яндекс апи для отображения маркера на карте, по адресу из формы.
Написал вот такой метод который получает json по запросу в яндекс, парсит его в хэш и достает координаты
def get_coordinates
    addr = URI.encode(URI.decode(self.address))
    http = "http://geocode-maps.yandex.ru/1.x/?format=json&geocode=#{addr}"
    json = RestClient.get(http)
    parced_json = ActiveSupport::JSON.decode(json)
    parced_json["response"]["GeoObjectCollection"]["featureMember"][0]["GeoObject"]["Point"]["pos"]
  end


что бы каждый раз при рендеринге страницы с картой, не делать запрос в яндекс я добавил поле coordinates в таблицу и записываю в это поле координаты при создании объекта
метод коллбэка в модели

before_save :set_coordinates

  def set_coordinates
    if address_changed?
      self.coordinates = get_coordinates
    end
  end


но проблема в том, что пользователь может ввести не корректный для яндекса запрос, и его нужно как то обрабатывать
я изменил метод таким образом
def get_coordinates
    begin
      addr = URI.encode(URI.decode(self.address))
      http = "http://geocode-maps.yandex.ru/1.x/?format=json&geocode=#{addr}"
      json = RestClient.get(http)
      parced_json = ActiveSupport::JSON.decode(json)
      parced_json["response"]["GeoObjectCollection"]["featureMember"][0]["GeoObject"]["Point"]["pos"]
    rescue NoMethodError
      self.errors.add(:coordinates)
    end
  end


но ошибка записывается не в @messages={:coordinates=>["is invalid"]}>

а в поле coordinates


как сделать так, что бы ошибка отправлялась в нужное место?
  • Вопрос задан
  • 2315 просмотров
Решения вопроса 1
@Renius
дурак восторженный
def get_coordinates
    begin
      addr = URI.encode(URI.decode(self.address))
      http = "http://geocode-maps.yandex.ru/1.x/?format=json&geocode=#{addr}"
      json = RestClient.get(http)
      parced_json = ActiveSupport::JSON.decode(json)
      coordinates = parced_json["response"]["GeoObjectCollection"]["featureMember"][0]["GeoObject"]["Point"]["pos"]
    rescue NoMethodError
      coordinates = nil
      self.errors.add(:coordinates)
    end
    coordinates
  end
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы