0

私は自分のapplication.rbに持っています:

config.active_record.default_timezone = :local

これにより、何かがデータベースに保存されるたびに、それを投稿したユーザーのタイムゾーンにタイムスタンプが付けられます。

ここで推測します..しかし、ユーザーがESTにいる場合、タイムスタンプはESTに関連しています。それらが PST にある場合、スタンプは PST に相対的です。

したがって、時間を引き出す場合、データベースはそれを最初に保存した時間に変換します。もちろん、これはすべて Rails の内部で行われており、この変換の実際の記録はありません。

たとえば、午後 4 時の日付を保存するとします。データベースを確認すると、UTC になっています。次に、その日付をビューに表示すると、具体的に言わなくても、ローカルのタイムゾーンに戻ります。

ここで質問です!

バージニア州にあるサーバーで、アイルランドに住むユーザーによって最初に作成されたオブジェクトのクローンを、Resque ワーカーによって夜通し作成したいとします。

何が起こるかというと、オブジェクトはユーザーではなくサーバーのローカル時間に更新されます。

質問:オブジェクトが保存された元の現地時間を抽出するにはどうすればよいですか?

4

1 に答える 1

1

ユーザーのタイムゾーンをどこかに保存し、リクエストごとに設定すると仮定していますapplication_controller.rb。明らかに、このステップは Resque ワーカーによって実行されるわけではないため、サーバーのタイム ゾーンがデフォルトになります。

ワーカー内のオブジェクトまたは変数が何らかの形で特定のユーザーに関連付けられている場合、ワーカー メソッドでユーザーのタイム ゾーンを取得し、メイン アプリケーションと同様に設定できます。

Time.zone = obj.user.time_zone

または、必要に応じて、オブジェクト自体にタイム ゾーンを格納します。

于 2012-07-10T19:26:44.017 に答える