我正在使用 Ruby on Rails 4,我想以正确的方式处理 cookie 中存在的数据。也就是说,当我存储到 cookie 数据时(GMT-06:00) Central Time (US & Canada)
cookies.permanent[:time_zone] = "(GMT-06:00) Central Time (US & Canada)"
然后在 cookie 内容中存储它%28GMT-06%3A00%29+Central+Time+%28US+%26+Canada%29
。
这样,当我cookies[:time_zone]
在代码中使用数据时
Time.use_zone(cookies[:time_zone], &block)
然后我明白了ArgumentError Invalid Timezone: (GMT-06:00) Central Time (US & Canada)
。
我认为问题是由于cookies[:time_zone]
数据是“按原样”(%28GMT-06%3A00%29+Central+Time+%28US+%26+Canada%29
)从cookie中读取的,因此在调用时会产生错误Time.use_zone
。
我应该如何读取/写入 cookie 数据?
@Matt Johnson 评论后更新
我的“hadcode”是
time_zone = cookies[:time_zone] || Time.zone
这样我就可以将time_zone
变量用于我的事务。但是,我注意到Time.zone
返回总是
(GMT-06:00) Central Time (US & Canada)
# instead of "Central Time (US & Canada)"
这就是问题所在:在我的“硬代码”中,cookienil
应该Time.zone
为我的事务返回正确的值,即Central Time (US & Canada)
.
所以我的问题变成了:我应该如何处理这个问题才能正确设置time_zone
变量?
注意:Time.zone
文档说明该方法
如果已设置(通过 ::zone=),则返回当前请求的 TimeZone。如果当前请求没有设置 Time.zone,则返回 config.time_zone 中指定的 TimeZone。
在我的application.rb
文件中我设置了
`config.time_zone = 'Central Time (US & Canada)'`