Rails 4 - 如何自动检测用户的位置并将其显示在网络应用程序上?

Rails 4 - How would I automatically detect a user's location and display it on the web app?

我目前有一个可用的应用程序,我想让 Rails 通过 IP 地址检测访问者的位置,并在我的网站主页上显示城市和州。例如,它会显示 "Hello {Name} from City, State".

访客无需输入任何内容。我知道 GeoIP 和 Geocode 之类的东西。据我所知,它们用于从 IP 搜索位置,反之亦然,但它们需要手动输入信息。

我需要它在用户访问我的主页时自动执行此操作。我有一个 Post 控制器和一个主页,我只想向主页的 HAML 添加一些代码来显示信息。我计划根据位置对用户的帖子进行分类,这将自动填写(我目前有一个用户必须手动输入的位置字段)。如果你也能告诉我怎么做,那就太好了。

有关我需要的实例,请访问 weather.com,您会在主页上看到您所在的城市(和天气)。

其他信息:我对 Rails 4(2 周前开始)还很陌生,所以请告诉我最简单的方法,并尽可能为我指出视频资源。

有很多提供 RESTful JSON API 的服务,它们会根据 IP 地址为您提供位置数据,例如:http://www.telize.com/

您需要做的就是在您的控制器中,通过 request.env['REMOTE_ADDR'] 捕获 HTTP 请求 (Rack::Request) 的源并将其提供给 Geo API.

添加到 gemfile

gem 'geocoder'

运行 bundle install 并重启你的服务器

<%= request.location.city %> 放入您希望显示城市名称的视图中。

另一种解决方案是使用 ruby gem 作为 Yandex 定位器 (https://tech.yandex.ru/locator/). Yandex locator is a service that finds mobile devices in a region delineated by a circle. The service returns longitude, latitude and precision. 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"}