ruby-on-rails - 根据 IP 预填充用户的时区?
问题描述
我有一个简单的时区字段,格式如下:
<div class="field">
<%= f.label :time_zone %><em> (appointment times will be displayed in your timezone)</em><br>
<%= f.select :time_zone, time_zone_options_for_select(f.object.time_zone, nil, ActiveSupport::TimeZone), {include_blank: true}, class: "form-control" %>
</div>
我在其他地方阅读过最佳实践是使用用户 IP 地址的时区预填充该字段,并且用户 99% 的时间都会接受该字段(如果不是用户的时区,他们可以简单地改变它)
如何在 ruby on rails 应用程序中实现这一点?
解决方案
要根据用户 IP 查找位置,您需要使用外部 API,例如IPStack - 没有“rails 方式”,因为它不是 Rails 的功能。
Geocoder gem通常用于此目的,它有一个不错的可用于地理编码的服务提供商列表。设置地理编码器后,您可以通过 IP 进行查找:
results = Geocoder.search("172.56.21.89")
results.first.time_zone
请注意,结果中实际返回的字段取决于使用的后端服务。也可以只使用您想直接与 Net::HTTP 或您选择的任何 HTTP 客户端一起使用的任何服务的 API。
推荐阅读
- excel - Excel 工作表引用一般和超链接功能
- javascript - webpack 无法加载模块或块时的事件或回调
- python - 为用户生成推荐的电影列表
- hive - 用于迭代和搜索元素的 Hive 查询
- sql-server - 使用数据转换后月份和日期位置互换
- java - 如何获取JavaParser方法参数解析的原始包名或类
- kubernetes - 如何使用 Terraform 将 GKE 凭证传递给 Kubernetes 提供者?
- angular - 类型'可观察的
>>' 不可分配给类型 'Observable ' - c# - 如何读取 XML 文件并更改某些值
- regex - 在 csv 文件中不正确的字段拆分后删除换行符