2017-04-09 53 views
0

enter image description hereRails的datetime_select開始時間比用戶區的時間

嗨更大!所以,我有一個rails應用程序,在創建出價表單中有一個<%= f.datetime_select :ends_at %>字段。我希望開始時間是用戶的當前時間,但允許其他用戶在創建此出價後在他們自己的時區中查看ends_at。

所以我需要兩方面的幫助:

* 1。如何將選擇下拉菜單設置爲顯示時間大於Time.now的時間,以及是否使用Time.now或Time.zone.now?

* 2。如何根據查看記錄的用戶時區更改ends_at?

真的很感激! 謝謝:)

回答

1

你有兩種選擇。

  1. application.rb文件中設置應用程序的時區。這將迫使所有時間都在那個時區。 只有當您的用戶在單個時區時才能使用。

  2. 存儲用戶時區,並使用rails控制器中的around_filter更改每個請求的時區。作爲建議的Rails - Setting time_zone dynamically as per user selection

背景

Time.zone.now只會時間戳轉換成該時區的Rails環境目前處於哪個除非另有規定總是UTC。

Time.now將始終返回系統時間。

如果你在UTC的後面說-05:00那個時候總是會向前看。

1

如何在控制器中設置Time.zone如何設置當前請求/線程的時區。

您也可以保持用戶的時區,這樣做:

Time.zone = current_user.time_zone

0

謝謝鄉親! :) 我通過以下方式解決了問題:

  1. 首先將默認時區更改爲中央時區。
  2. 然後加入在色器件作爲的time_zone,其中用戶指定的 按他的時區
  3. 加在應用控制器的周圍過濾器,以確保時間 改變用於用戶的新的列:

    類ApplicationController的<的ActionController :: Base的 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 在使用您的建議和研究更多。