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

Posted

技术标签:

【中文标题】Rails 4 - 我如何自动检测用户的位置并将其显示在 Web 应用程序上?【英文标题】:Rails 4 - How would I automatically detect a user's location and display it on the web app? 【发布时间】:2015-08-19 18:26:48 【问题描述】:

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

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

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

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

附加信息:我是 Rails 4 的新手(两周前开始),所以请告诉我最简单的方法,如果可能的话,请指点我视频资源。

【问题讨论】:

你看过github.com/geokit/geokit-rails吗? 请查看post 我选择关闭它,因为它太宽泛了。任何潜在的解决方案都需要比“我只想在主页的 HAML 中添加一些代码以显示信息”多一点思考。 Geokit 无法满足我的需求。需要手动输入IP。 @max 我完全不同意。我要求一个非常具体的请求和资源来帮助我实施它,因为我是新手。仅仅因为我想做的很简单(在主页上显示信息)并不意味着它是“广泛的”。 【参考方案1】:

添加到 gemfile

gem 'geocoder'

运行 bundle install 并重新启动您的服务器

<%= request.location.city %> 放在您希望城市名称出现的视图中。

【讨论】:

这可以在本地主机上工作还是网站需要上线?如果我的站点当前在本地计算机上,我将如何对其进行测试? 是的,抱歉应该提到在本地不起作用,因为没有有效的 ip。如果你想在控制器中操作东西,你可以,但这不是必须的。例如,您可以在控制器中拥有@city = request.location.city 并做一些事情,然后在视图中渲染<%= @city %> @Laser,我做了同样的事情,但没有获取位置,没有价值到达那里 @Laser 我添加了 gem,安装了它,并在我的视图页面中添加了 。它显示为空。也在实时服务器中运行。我怎么了? 所以本地它应该是空的,但如果它发生在部署中,很可能不是你,而是使用的默认地理编码器的服务,freegeoip。见github.com/fiorix/freegeoip/issues/159#issuecomment-189754228【参考方案2】:

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

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

【讨论】:

【参考方案3】:

另一种解决方案是将 ruby​​ gem 用于 Yandex 定位器 (https://tech.yandex.ru/locator/)。 Yandex 定位器是一项服务,可在圆圈所划定的区域内查找移动设备。该服务返回经度、纬度和精度。 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"

【讨论】:

以上是关于Rails 4 - 我如何自动检测用户的位置并将其显示在 Web 应用程序上?的主要内容,如果未能解决你的问题,请参考以下文章

如何自动获取用户的地理位置值并将其作为 POST 请求发送到后端

Webpack:如何使角度自动检测 jQuery 并将其用作 angular.element 而不是 jqLit​​e?

自动检测位置(城市和州),并将该信息分别放入输入和选择字段

在rails中处理后如何更新回形针视频位置

自动加载常量时检测到循环依赖(Rails 4、Ruby 2)

如何从 URL 下载文件并将其保存在 Rails 中?