ユーザーが特定のタイムゾーンを使用して日付を設定できるようにする方法は次のとおりです。
フォームで送信されたマルチパラメーター属性を特定のタイム ゾーンに変換するには、パラメーターを手動で datetime オブジェクトに変換するメソッドをコントローラーに追加します。モデルの動作に影響を与えたくなかったので、これをコントローラーに追加することにしました。モデルに日付を設定して、日付が正しく設定されていると想定できるはずです。
def create
convert_datetimes_to_pdt("start_date")
convert_datetimes_to_pdt("end_date")
@model = MyModel.new(params[:my_model])
# ...
end
def update
convert_datetimes_to_pdt("start_date")
convert_datetimes_to_pdt("end_date")
# ...
end
def convert_datetimes_to_pdt(field)
datetime = (1..5).collect {|num| params['my_model'].delete "#{field}(#{num}i)" }
if datetime[0] and datetime[1] and datetime[2] # only if a date has been set
params['my_model'][field] = Time.find_zone!("Pacific Time (US & Canada)").local(*datetime.map(&:to_i))
end
end
これで、datetime が正しいタイム ゾーンに調整されます。ただし、ユーザーが時刻を編集しようとすると、フォーム フィールドには UTC で時刻が表示されます。これを修正するには、次の呼び出しでフィールドをラップしますTime.use_zone
。
Time.use_zone("Pacific Time (US & Canada)") do
f.datetime_select :start_date
end