2016-09-07 64 views
0

在我的应用程序中,我有一个窗体,用于创建带有time.select的班次。但是,视图中显示的时间错误了一个小时,数据库中显示的时间错误了两个小时。如果我选择start_time为10:00并将stop_time设置为12:00,则在视图中显示为9:00-11:00,而在检查控制台时显示为08:00-10:00。导轨形式和时区

我想要时间对应于系统时间。在控制台输入Time.now可以给出正确的时间。我很困扰。

究竟是什么错误,我该如何解决这个问题?

我使用rails 5和sqlite数据库。

形式:

<div class="field"> 
    <%= f.label :Start %> 
    <%= f.time_select :start_time, {minute_step: 30} %> 
    </div> 
    <br> 
    <div class="field"> 
    <%= f.label :Stop %> 
    <%= f.time_select :stop_time, {minute_step: 30} %> 
    </div> 

application.rb中

config.time_zone = 'Stockholm' 
config.active_record.default_timezone = :local 
config.active_record.time_zone_aware_types = [:datetime, :time] 

回答

0

这可能是一个权宜之计: 在选择框中添加不同的名称,用正确的时区,但让数据库保存它在0时区。

控制器:

@start_times_correct = Model.pluck(:start_time).map{|value| [value.in_time_zone('Stockholm'), value]} 

查看:

= f.select(:start_time, options_for_select(@start_times_correct)) 

注:本作品在轨道4,我希望这是在轨道5个可用了。您还可以使用编辑的值使用strftime来自定义日期的显示方式。

+0

谢谢您的回答,但这是我想避免的解决方案类型。希望有一个更稳定的解决方案。 – SKR

+0

Mysql在数据库中提供时区,如果您不使用之前存在的数据库,您可以查看该数据库 –