2016-09-07 8 views
0

私のアプリでは、time.selectでシフトを作成するためのフォームがあります。しかし、ビューに表示される時間は1時間で間違っており、データベースに表示されている時間は2時間で間違っています。 start_timeを10:00、stop_timeを12:00に設定すると、ビューには9:00-11:00、コンソールには08:00-10:00と表示されます。レールフォームとタイムゾーン

システム時刻に対応したい場合があります。コンソールでTime.nowと入力すると、正しい時刻が得られます。私は非常に混乱しています。

何が間違っていますか?これをどのように修正できますか?

私はレール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)) 

注:これは私が、これはあまりにも、レール5で利用可能であると思い、レール4で動作します。編集した値にstrftimeを使用して、日付の表示方法をカスタマイズすることもできます。

+0

ありがとうございますが、これは回避したいソリューションのタイプです。うまくいけば、より安定した修正があります。 – SKR

+0

Mysqlはデータベースにタイムゾーンを提供します。以前に存在していたdbで作業していない場合は、 –

関連する問題