在Ruby on Rails中,从DB返回的非确定性数据?

时间:2011-04-04 04:28:28

标签: ruby-on-rails ruby-on-rails-3

我试了一句:

last_item = Item.last
last_item.created_at.strftime('%Y-%m-%d')

并且控制台日志中的SQL是:

SELECT "items".* FROM "items" ORDER BY items.id DESC LIMIT 1

但有时候我会2011-04-03,有时会2011-04-04

这真的很奇怪。如果我打印出超时,则为

  

Sun,2011年4月3日17:58:48 UTC +00:00

是什么让Rails 3(3.0.5)出现这种非确定性行为?是时区吗?但是我在浏览器中按下Reload,这次给了04-03,下次它给04-04而不重启服务器或更改任何配置文件或源代码。


更新:进一步调试显示,当它是04-04时,使用p last_item.created_at打印的时间为:

  

周一,2011年4月4日01:58:48 HKT +08:00

但我在视图中有这一行:

- Time.zone = 'Hong Kong'

last_item.created_at.strftime('%Y-%m-%d')已在控制器中完成。因此,控制器不应该先运行,而在视图中,我只是尝试使用不同的时区打印它...同时,为什么它有时会变成UTC,有时会变成HKT?

1 个答案:

答案 0 :(得分:1)

我认为在视图中设置时区可能会导致这种非确定性行为。您应该尝试在config目录中的某个位置设置时区,可能在config/application.rb