0

次の状況を処理する最善の方法は何ですか。

「イベント」を作成する「管理者」がいます。これらのイベントは、全国的に、つまり異なるタイム ゾーンにすることができます。現在、米国のタイムゾーンの最新リストを含む選択メニューがあります。データベース テーブルには、選択したタイム ゾーンに対応する列があります。これは、管理者が同等の GMT を把握しようとする代わりに、東部標準時の午後 5 時、太平洋標準時の午後 5 時などを選択できるようにするためです。

アプリケーションは、デフォルトのタイムゾーンとして、environment.rb ファイルに従って UTC を使用しています。

管理者が「東部時間 (米国およびカナダ)」を選択した場合、選択された日付スタンプは引き続き UTC (またはアプリのデフォルト) として保存されます。タイム ゾーンを含め、上記で選択した時間より前にイベントが表示されないクエリを実行する必要があります。

イベントには独自のタイム ゾーンが必要なので、データをどのように保存する必要がありますか? 私は当初、値を保存する前にRailsをだます必要があると考えていたので、タイムゾーンのUTCオフセットを保存します。

これは before_save および after_find モデル メソッドで処理されます。しかし、うまくいかないようです。というか、何かが欠けています..

4

1 に答える 1

1

あなたは単純な事実を見逃しています。時間は普遍的です。UTCの午後1時は、UTCの午後1時です。すべてのイベントでtime_zoneを保存する必要はありません。時間の入力を簡単にするために、管理者に選択させる必要があります。バックエンドに関しては、常にUTCです。確かに、異なるタイムゾーンから時間を入力し、異なるタイムゾーンに出力することはできますが、どのようにねじっても「ロンドンの午後1時」は同じです。したがって、ユーザーがイベントを見ているときは、event_date <Time.now.utc(過去のすべてのイベント)を実行するだけです。

ただし、監視しているユーザーが実際にイベントとは異なるタイムゾーンにいて、イベントの日付をユーザーのホームタイムゾーンで表示する場合は、ユーザーにホームタイムゾーンを選択させて、ユーザーテーブルに保存できます。次に、before_filterあなたApplicationControllerはただすることができます:

class ApplicationController < ActionController::Base
  before_filter :set_time_zone

  private
  def set_time_zone
    Time.zone = current_user.time_zone if current_user
  end
end

次に、データベースから取得するすべてのTime値(event.dateなど)が、ユーザーのホームタイムゾーンに自動的に変換されます。

あるいは、私はその質問を誤解したのかもしれません。: ) お知らせ下さい。

于 2010-07-09T05:28:22.707 に答える