9

私はコンサートツアーのウェブサイト用のアプリを使用しています。このアプリでは、すべての時間(発表時間、販売開始時間、イベント開始時間)が各特定の会場のタイムゾーンにローカルです。該当する場合は、ユーザーが入力した日付/時刻を取得し、before_filterを実行して適切なタイムゾーンを設定し、すべてがUTCでデータベースに保存されるようにします。'new'フォームの場合、およびインデックスとショーアクションに時刻を表示する場合は、まったく問題ありません。データがデータベースからビューに戻されるとき、私はin_time_zoneを使用して特定の場所ごとに調整します。

唯一の問題は編集フォームにあります。日付/時刻の選択により、UTCでデータが表示されます。私がサイトで作業しているとき、私は精神的に調整しますが、他の人にとっては混乱します。次のようなことをしたいと思います。

<%= f.datetime_select :start_datetime.in_time_zone(@event.time_zone) %>

または、コントローラーで:

def edit
  @performance = Performance.find(params[:id])
  @event = @performance.event
  @performance.start_datetime = @performance.start_datetime.in_time_zone(@event.time_zone)
end

次に、単純に<%= f.datetime_select :start_datetime %>

残念ながら、これを行う正しい方法が見つかりませんでした。試してみる価値のあるアイデアはありますか?

どうもありがとうございます。

4

4 に答える 4

3

次のように、datetime_select のデフォルトの方法を使用できます。

%br
= f.label :req_sess_start, "Session starts at"
= f.datetime_select(:req_sess_start, :start_year => 2010, :ampm => true, :default => 0.days.from_now.in_time_zone(@timezone))

デフォルト値が表示されているため、クライアントは時間を自分のローカルタイムゾーンで入力する必要があると想定しますが...この値は実際にはアプリケーションのデフォルトのタイムゾーンになります(application.rbで提供され、デフォルトはUTCです)。したがって、正しい値に変換するには、サーバー側のコーディングが必要になります。

于 2012-05-30T17:23:42.137 に答える
0

このようなものはどうですか:

# change PST to correct zone abbrev.
new_zone = ActiveSupport::TimeZone.new("PST")
@performance.start_datetime = @performance.start_datetime.in_time_zone(new_zone)
于 2011-09-26T00:25:41.053 に答える
0

これが古い投稿であることに気付きましたが、もし私があなただったら、会場の日時を表すために仮想属性を使用します. たとえば、adjusted_start_time という属性をパフォーマンスに追加できます。

于 2012-01-29T14:59:41.310 に答える