2017-04-09 9 views
0

enter image description hereRails datetime_select開始時刻がユーザーのゾーン時間より大きい

こんにちは!だから、私は<%= f.datetime_select :ends_at %>フィールドを作成した入札フォームにあるレールアプリを持っています。開始時刻をユーザーの現在の時刻にしたいが、この入札単価が作成されたら、他のユーザーが自分のタイムゾーンでends_atを見ることができるようにする。

私は2つの面で助けが必要です:

* 1。選択ドロップダウンを設定して、ユーザーの現在のタイムゾーンについてTime.nowより大きい時間を表示し、Time.nowまたはTime.zone.nowを使用するかどうかを表示する方法。

* 2。レコードを表示するユーザーのタイムゾーンに関してends_atを変更するにはどうすればよいですか?

本当にありがとう! ありがとう:)

答えて

1

あなたは2つの選択肢があります。

  1. application.rbファイルのアプリケーションのタイムゾーンを設定します。これは、提示されたすべての時間をそのタイムゾーンに強制します。 これは、ユーザーが単一のタイムゾーンにいる場合にのみ機能します。

  2. レールゾーンコントローラのaround_filterを使用して、タイムゾーンを保存し、リクエストごとのタイムゾーンを変更します。背景

    Time.zone.nowについてRails - Setting time_zone dynamically as per user selection

によって示唆されるようにのみRailsの環境が現在あるタイムゾーン。特に指定がない限り、常にUTCであるにタイムスタンプを変換しようとしています。

Time.nowは常にシステム時刻を返します。

あなたがUTCの後ろにいると-05:00と言えば、その時は常に先に見えます。

1

現在のリクエスト/スレッドのタイムゾーンを設定するコントローラでは、Time.zoneを設定するのはどうですか?

はまた、ユーザーのタイムゾーンを保持し、同じような何かを行うことができます。

Time.zone = current_user.time_zone

0

感謝の人々! :) 私はこの問題を次のように解決しました。

  1. まず、デフォルトのタイムゾーンを中時間に変更します。
  2. そして
  3. は時間を確保するために、アプリケーション・コントローラにフィルタの周りに追加された彼の時間帯ごとに を指定したユーザ、TIME_ZONEよう工夫に新しい列を追加した は、ユーザのために変更されている:

    クラスApplicationControllerに< ActionController ::ベース around_filter:user_time_zone、もし:CURRENT_USER

    private 
    
        def user_time_zone(&block) 
        Time.use_zone(current_user.time_zone, &block) 
        end 
    

    エンド

Ryan Bates:https://www.youtube.com/watch?v=X-1ISHNEB9U によって良いビデオが見つかりました。

関連する問題