如何解决根据用户的 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 通常用于此目的,它有一个不错的 list of service providers available 用于地理编码。设置地理编码器后,您可以通过 IP 进行查找:
results = Geocoder.search("172.56.21.89")
results.first.time_zone
请注意,结果中实际返回的字段取决于使用的后端服务。也可以仅使用您想直接与 Net::HTTP 或您选择的任何 HTTP 客户端一起使用的任何服务的 API。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。