0

マルチテナント Rails アプリがあり、一部のモデルには日付フィールドがあります。レコードごとに異なるタイムゾーンを設定することは可能ですか? タイムゾーンと呼ばれるフィールドを追加してから行うようなことをしますDate.somemethodthatsetstimezone(timezone).now()か? これが悪い質問である場合は申し訳ありません。

4

1 に答える 1

3

あなたの質問に対する簡単な答えはイエスです - しかし、あなたが何をしているのかを知っていることを確認してください.

ActiveSupport::TimeZoneActiveSupport::TimeWithZoneを見てみましょう。ActiveSupport::TimeZone は、文字列としてアクセスする値オブジェクトとしてタイム ゾーンを提供します。たとえば、'Eastern Time (US & Canada)'モデルの time_zone 列に文字列を格納し (たとえば、 @project)、タイム ゾーン インスタンスを で取得できますActiveSupport::TimeZone[@project.time_zone]

のようなもので現在のプロセスのタイムゾーンを設定できますTime.zone = 'Eastern Time (US & Canada)'。Rails では、アプリケーション構成でアプリのタイム ゾーンを構成することもできます。

を呼び出して、現在の ruby​​ プロセスが設定されているタイム ゾーンでTime.zone.now現在の時刻を ( のインスタンスとして) 返すことができます。ActiveSupport::TimeWithZone

を呼び出しTime.now.in_time_zone('Eastern Time (US & Canada)')て、指定されたタイム ゾーンの現在の時刻を取得できます。

コード ブロックのタイム ゾーンを設定することもできます。

Time.use_zone('Eastern Time (US & Canada)') do
  # do stuff in eastern time

  Time.now 
  # => current eastern time 
end

このメソッドを使用すると、モデルのタイム ゾーンと around フィルターを使用して、Rails リクエスト全体のタイム ゾーンを設定できます。

around_filter :project_time_zone

# actions use project's configured time zone

private

def project_time_zone(&block)
  Time.use_zone(@project.time_zone, &block)
end

これらのアプローチのいずれかで、必要なものが得られるはずです。

于 2013-04-04T07:05:00.653 に答える