怎样把收到TZInfo标识符的Rails区名称/键JS值?
FROM: "America/New_York"
从JavaScript TZinfo检测返回
TO: "Eastern Time (US & Canada)"
约定的Rails时区使用
或另一个例子:
"Pacific/Honolulu"
=>转换为=> "Hawaii"
在两者都可以ActiveSupport::TimeZone < Object
映射,但Rails使用的关键微克"Eastern Time (US & Canada)"
在下拉列表,验证及保存到Time.use_zone()
根据我了解ActiveSupport::TimeZone.us_zones
这似乎是特别重要的一大跳节省时间incases(其中轨道听起来处理好),并匹配刚好偏移不会完成。 如果没有存储到数据库与轨道区名称,然后验证失败而无法正常在用户的配置文件设置页面的下拉列表中匹配ActiveSupport::TimeZone.zones_map
这一目标是,用户没有选择他们的注册时区或需要注册后更改它的设置。 浏览器检测到它,并将它传递给hidden_field上注册。 在难得的机会,他们在比他们的家庭/工作方式不同的地方注册。 它们可以手动后覆盖在他们的帐户设置。
似乎是一个共同的差距试图摄取JS时区时检测。 这甚至可能成为如何通过从JS返回的信息,以轨道转换次级问题,然后回到JS来存回形式的hidden_field? 希望我正确和无可否认陷害的问题有点绿色的导轨时,有可能是一个简单的解决这个...
非常感谢所有帮助!
-E
的ActiveSupport Time.zone文档
http://api.rubyonrails.org/classes/ActiveSupport/TimeZone.html#method-i-parse
MAPPING = {"Eastern Time (US & Canada)" => "America/New_York"
使用JS包装宝石“颞轨道”来检测用户的时区:
https://github.com/jejacks0n/temporal
用户TIME_ZONE工具所见:
http://railscasts.com/episodes/106-time-zones-revised
*使用设计和制定,必然
注册获得查看脚本
<script>
$(function() {
var detected_zone = Temporal.detect();
console.log(detected_zone); // returns object
detected_zone = detected_zone.timezone.name;
console.log(detected_zone); // returns "America/New_York"
$('#user_time_zone').val(detected_zone); // ! need to convert this to rails TimeZone name !
});
</script>
用户模型
validates_inclusion_of :time_zone, in: ActiveSupport::TimeZone.zones_map(&:name)
用户帐户设置窗体
<%= f.label :time_zone, label: "Time Zone" %><br />
<%= f.time_zone_select :time_zone, ActiveSupport::TimeZone.us_zones %>