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 worker 执行的,所以会默认为服务器时区。

如果 worker 中的对象或某个变量以某种方式与特定用户相关联,您可以在 worker 方法中获取用户的时区并像在主应用程序中一样设置它:

Time.zone = obj.user.time_zone

或者,如果合适,将时区存储在对象本身中。

于 2012-07-10T19:26:44.017 回答