无法让Rails表单构建器遵守time_select输入的给定时区

时间:2016-03-09 19:17:13

标签: ruby-on-rails forms timezone

无法让我的rails输入助手来尊重给定的时区。我已经查看了有关此主题和代码示例的所有现有问题。看起来这应该很简单,但我无处可去。我希望有人可以快速看到我的方式错误:

我在Rails中有一个Pro模型,其中time字段名为" work_start_time"。

# schema.rb
create_table "pros", force: true do |t|
    t.time     "work_start_time"

我的Pro有一个非常基本的表单,其中包含一些额外的行来帮助我调试:

Work_start_time in UTC:<br>
<%= @pro.work_start_time %><br>

Work_start_time in PST:<br>
<% Time.use_zone("Pacific Time (US & Canada)") do %>
  <%= @pro.work_start_time.in_time_zone %><br>
<% end %>

Form for work_start_time using PST:<br>
<%= form_for @pro do |f| %>
  <% Time.use_zone("Pacific Time (US & Canada)") do %>
    <%= f.time_select :work_start_time %><br>
  <% end %>
<% end %>

现在我希望第二次和第三次是相同的,因为它们都应该在PST中显示。但是time_select没有尊重它,而是用UTC显示时间:

enter image description here

我做错了什么?我尝试过使用datetime_select。我尝试将work_start_time作为value:参数提供给select方法。没有骰子。

这是一个简化示例 - 通常时区实际上是存储的current_user.time_zone,我们将Time.use_zone设置为应用程序控制器中的around_filter。但是对于这个简化的实验,这些都是禁用的。

Ruby 2.2(与2.0相同的问题) Rails 4.1.8(与4.2.6和Ruby 2.2相同的问题)

1 个答案:

答案 0 :(得分:1)

我没有尝试使用Time.use_zone do,但您可以尝试在@ pro.work_start_time.in_time_zone调用结束时添加to_s。或者你也可以使用Moment.js和Moment时区并在javascript中渲染。

我发现前端使用时刻更容易在表单中返回utc次,并将utc次转换为默认时区。