Rails 4:编辑视图中的错误时间,每个请求都包含字符串字段和TimeZone

Fre*_*rin 2 timezone datetime ruby-on-rails utc

我根据请求使用TimeZone在Ruby on Rails 4中开发应用程序.

我想在我的应用程序中使用日期时间选择器(http://xdsoft.net/jqplugins/datetimepicker/)来替换默认的Simple_form日期时间输入(5个组合框...).

对于这种日期时间选择器(我搜索其他人,它是相同的),在我看来,我必须使用"字符串"字段,如下所示:

<%= f.input :done_at, as: :string, input_html: { :data => { :behaviour => "datetimepicker" } } %>  
Run Code Online (Sandbox Code Playgroud)

当我发布表单时,Rails负责处理时区并在数据库中存储UTC时间.
例如,我在该字段中输入"2014-03-14 19:45:07"(当地时间是巴黎,所以UTC +0100),我在数据库中有"2014-03-14 18:45:07" ,UTC.这是正确的.

但是当我想编辑信息时,Rails会在错误的时间内填写该字段.偏移时区丢失,我在字段中显示"2014-03-14 18:45:07"(UTC时间),因此在正确时间前1小时.

如何才能有正确的时间来处理用户时区?(不是UTC)

我尝试在http://jessehouse.com/blog/2013/11/15/working-with-timezones-and-ruby-on-rails/上找到的解决方案来覆盖日期的显示,但它不起作用.

def done_at
  super.in_time_zone(time_zone) if super && time_zone
end
Run Code Online (Sandbox Code Playgroud)

如果在我看来,我把@ action.done_at,时间是正确的但不在现场.

谢谢,

弗雷德

ush*_*sha 5

显式设置输入的值.@object.done_at.in_time_zone(time_zone)如果需要,您可以转移到帮助者

<%= f.input :done_at, as: :string, input_html: { :data => { :behaviour => "datetimepicker" }, :value => @object.done_at.in_time_zone(time_zone).strftime('%d-%m-%Y  %H:%M') } %> 
Run Code Online (Sandbox Code Playgroud)