私は、親が乳児の睡眠を追跡するのに役立つRailsアプリを作成しました。それが正しく機能するためには、さまざまなタイムゾーンをサポートする必要がありました。タイムゾーンでユーザーを煩わせることを避けるために、タイムゾーンオフセットを含む非表示フィールドをログインフォームに追加する小さなJavaScriptを作成しました。これがコードです
var timeZoneField = $("input[name='user_tz_offset']");
if (timeZoneField.length) {
var browserDate = new Date();
var timeZoneOffsetSeconds = (browserDate.getTimezoneOffset() * 60) * -1;
$(timeZoneField).val(timeZoneOffsetSeconds);
}
そのフィールドのデータを使用して、Time.zoneをそのオフセットに対応する都市に設定しました。このようなものがタイムゾーンを生成します
user_time_zone = ActiveSupport::TimeZone.[](params[:user_tz_offset].to_i)
session[:user_time_zone] = user_time_zone
最後に、ApplicationControllerでタイムゾーンを設定します。
def set_user_time_zone
if (session[:user_id])
Time.zone = session[:user_time_zone]
else
Time.zone = config.time_zone
end
end
これはすべて、私が自分で書いたログイン機能に依存しています。ただし、自分のコードは十分に機能しておらず、特に安全でもないため、後でより優れたユーザー管理システムを使用する必要があることはわかっていました(最初は他の機能に焦点を合わせていました)。
今、私はdeviseをインストールしました、そしてそれはログインとログアウトにうまく機能します、サイトの他のほとんどの機能も同様に機能します。しかし、ユーザー管理システムとしてdeviseを使用してタイムゾーンサポートにアプローチする方法がわかりません。
1つのアイデアは、DeviseのSessionsControllerをオーバーライドし、その非表示のタイムゾーンフィールドのチェックを追加して、その値をuser_sessionに追加することです。しかし、そうすることには不安を感じます。それは悪い考えのように感じます。
登録時にユーザーにタイムゾーン情報を追加させることなく、この機能を追加するためのより良い方法はありますか?
ありがとうございました!