(Ruby MRI 1.9.2 で Rails 3.2.3 を使用しています)
すべてが UTC で一元的に保存されます。これはいい。各ユーザーには「タイムゾーン」プロパティがあります。私の ApplicationController には、 Time.zone をユーザーの保存されたタイムゾーンに調整する前のフィルターがあります。これもいいですね。
上記を考えると、ユーザーが日時の選択を時刻で完了した場合、その時刻は Time.zone にあると予想され、Rails はこれを自動的に調整して UTC として保存します。これも、うまい。
現在: ユーザーが別のタイム ゾーンで時刻を入力し、UTC として保存できるようにしたいと考えています。ただし、Rails は、完了した日時の選択が (以前に ApplicationController によって設定された) Time.zone に入力されていることを期待しています。したがって、Rails は UTC に正しく調整されません。
第 3 タイム ゾーンにあると入力された時間を節約するという目標を達成するにはどうすればよいですか?
図:
私の使用シナリオは、西海岸のホテルに属するドキュメントの日付を調整するフロリダのユーザーです。彼らは西海岸の時代に入ろうとしています。
jQuery を使用して、スタイル付きピッカーでテキスト ボックスのスタイルを設定しているので、テキスト ボックスに文字列を出力する方法があります。
<%= f.text_field(:created_at, :value => adjusted_to_hotel_time(@document.created_at), :class => 'text datetime_picker') %>
def adjusted_to_hotel_time(time)
time.in_time_zone(@current_hotel.timezone).to_s(:admin_jquery) # formatted for the jQuery datetime_picker text fields.
end
これは完全に機能していますが、Rails は @document が保存されるときに UTC に正しく調整されません。何がわからないのかわからない - そのフィールドに入力されたデータを@current_hotel.timezoneにあるものとして「タグ付け」して、Railsが親オブジェクトを保存するときにUTCに正しくオフセットするようにするにはどうすればよいですか?