Как получить place_id с помощью геокодера rails

Я использую драгоценный камень rails 'geocoder' в своем приложении rails. Вот код:

test.rb

class Test < ActiveRecord::Base

  reverse_geocoded_by :latitude, :longitude do |obj,results|
    if geo = results.first
        obj.street = geo.street_address
        obj.city    = geo.city
        obj.state = geo.state
        obj.country = geo.country
    end
  end

  after_validation :reverse_geocode
end

схема.rb

  create_table "tests", force: :cascade do |t|
    t.string    "street"
    t.string    "city"
    t.string    "state"
    t.string    "country"
    t.string    "place_id"
  end

После создания тестовой модели в консоли rails;

testLoc = Test.create(latitude: "49", longitude: "101")

он создает этот API Карт Google: http://maps.googleapis.com/maps/api/geocode/json?language=en&latlng=49.0%2C101.0&sensor=false

Оттуда я вижу, что у него есть place_id.

"place_id": "ChIJnasu3tKddF0RqAvcjn5EhBE",

Если я добавлю этот код в test.rb чуть ниже obj.country,

obj.place_id = geo.place_id

он возвращает NoMethodError: неопределенный метод `place_id' для #

Итак, как я могу получить этот place_id, добавив некоторый код в мой Test.rb?


person Safwan Marwan    schedule 06.08.2015    source источник


Ответы (1)


Сначала проанализируйте JSON из Google API.

parsed_response = JSON.parse(results.to_json)

Затем получите значение из place_id

obj.place_id = parsed_response[0]["data"]["place_id"]
person Mohammad Norhamizan    schedule 06.08.2015
comment
Это работает! Спасибо @Mohammad, но у меня есть еще один вопрос относительно вашего ответа. Почему мне нужно анализировать JSON, чтобы получить place_id? - person Safwan Marwan; 06.08.2015
comment
Результаты геокодера Rails не предоставляют эти данные. См. rubydoc.info/gems/rails-geocoder/0.9.11. в расширенном геокодировании - person Mohammad Norhamizan; 06.08.2015