アプリの設定方法に応じて、これを行う方法がいくつかあります。いずれも Heroku 環境に固有のものではありません。
アプリがユーザーのサインアップを許可している場合、おそらく User モデルがあり、認証/サインアップに Devise gem を使用している可能性があります。データベース (:time_zone) にフィールドを追加し、サインアップ時にユーザーのタイムゾーンをこのフィールドに保存します。
>> rails generate migration add_time_zone_to_users time_zone:string
>> rake db:migrate
Rails は便利な time_zone_select フォーム ヘルパーを提供します。これは、ユーザーに表示できるすべてのタイム ゾーンを含む選択リストを提供します。これをユーザー サインアップ フォームに追加し、ユーザーがサインアップ時にタイム ゾーンを設定できるようにします。
http://apidock.com/rails/ActionView/Helpers/FormOptionsHelper/time_zone_select
アプリケーションコントローラーでは、次のようなことができます。
before_filter :set_time_zone
def set_time_zone
#current user is a devise method see https://github.com/plataformatec/devise
Time.zone = current_user.time_zone if current_user
end
次に、アプリの呼び出し.in_time_zone
に日付を表示すると、ユーザーのタイムゾーンで時間が表示される時間インスタンスが呼び出されます。
<%= Time.now.in_time_zone %> or <%= @your_model.created_at.in_time_zone %>
ユーザー認証がない場合は、javascript にフォールバックできます。これを行うgetTimezoneOffset()
には、日付オブジェクトでネイティブの JavaScript を使用するか、次の jsTimezoneDetect プラグインを使用することをお勧めします。
http://www.pageloom.com/automatic-timezone-detection-with-javascript
最後に、両方のハイブリッドを使用し、最初に JavaScript を使用してタイム ゾーン オフセットを検出し、この値を Rails セッション/Cookie に保存し、before_filter を使用して上記のように Time.zone を設定しますが、以前に計算されたセッションの time_zone 値に基づいています。ジャバスクリプトで。