2015-08-19 4 views
0

В настоящее время у меня есть рабочее приложение, и я хотел бы, чтобы Rails обнаружил местоположение посетителя по IP-адресу и отобразил город и штат на главной странице моего сайта. Например, он отобразит «Hello {Name] из City, State».Rails 4 - Как я могу автоматически определить местоположение пользователя и отобразить его в веб-приложении?

Посетителям не нужно ничего вводить. Я знаю такие вещи, как GeoIP и Geocode. Насколько я знаю о них, они используются для поиска местоположений с IP или наоборот, но они требуют ручного ввода информации.

Мне это нужно, чтобы сделать это автоматически, как только пользователь посетит мою домашнюю страницу. У меня есть Post Controller и домашняя страница, и я просто хочу добавить код в HAML моей домашней страницы, чтобы отобразить информацию. Я планирую классифицировать посты пользователя на основе местоположения, которое будет автоматически заполнено (у меня в настоящее время есть поле местоположения, которое пользователь должен ввести вручную). Если вы можете показать мне, как это сделать, это было бы здорово.

Для живого примера того, что мне нужно, посетите weather.com, и вы увидите свой город (и погоду) на главной странице.

Дополнительная информация: Я довольно новичок в Rails 4 (начался 2 недели назад), поэтому, пожалуйста, покажите мне самый простой способ и укажите мне видео ресурсы, если это возможно.

+0

Вы смотрели на https://github.com/geokit/geokit-rails? –

+0

Пожалуйста, проверьте это [сообщение] (http://stackoverflow.com/questions/28686322/get-user-city-location-ruby-on-rails) –

+0

Я решил закрыть это слишком широко. Любое потенциальное решение требует немного больше мысли, чем «Я просто хочу добавить код в HAML моей домашней страницы, чтобы отобразить информацию». – max

ответ

3

Добавить в Gemfile

gem 'geocoder' 

запустить bundle install и перезапустить сервер

Положите <%= request.location.city %> в виде вы хотите название города появится в.

+0

Будет ли эта работа работать на локальном хосте или должен ли сайт жить? Как я могу проверить его, если мой сайт находится на локальной машине? –

+0

Только этот код, никаких изменений в контроллере? –

+0

Yeh, извините, должен был упомянуть не работает локально, так как нет действительного ip. Если вы хотите манипулировать вещами в контроллере, вы можете, но это необязательно. Например, вы можете иметь '@city = request.location.city' в контроллере и делать кучу вещей, а затем отображать' <%= @city %> 'в представлении. – Laser

1

Есть много услуг, которые предоставляют RESTful API, JSON, который даст вам данные о местоположении на основе IP-адреса, например: http://www.telize.com/

Все, что вам нужно сделать, это в вашем контроллере, поймать источник HTTP запросите (Rack::Request) через request.env['REMOTE_ADDR'] и подайте на Geo API.

0

Еще одним решением является использование рубин драгоценный камень для локатора Яндекса (https://tech.yandex.ru/locator/). Яндекс-локатор - это служба, которая находит мобильные устройства в области, ограниченной кругом. Служба возвращает долготу, широту и точность. https://github.com/sergey-chechaev/yandex_locator

client = YandexLocator::Client.new(api_key: 'api key', version: '1.0') 
result = client.lookup(ip: { address_v4: '178.247.233.3' }) 
result.position 
# => {"altitude"=>0.0, "altitude_precision"=>30.0, "latitude"=>41.00892639160156, "longitude"=>28.96711158752441, "precision"=>100000.0, "type"=>"ip"}