ActiveRecord中的奇数时间存储行为

时间:2009-11-09 09:03:55

标签: ruby-on-rails activerecord time

我的数据库中有以下条目:

t.time :my_time_stamp

在我的控制器中,我这样更新:

model.update_attributes(:my_time_stamp => Time.now.utc)

我可以看到我在写:

Mon 9 November, 8:54.54 UTC 2009 

然而,当我后来读到这个值时,我得到了:

Sat Jan 01 08:54:54 UTC 2000

似乎时间部分已存储但未存储日期部分。我希望这是因为它是一个时间字段,但为什么我最终存储和检索日期?我想我必须误解这是如何以某种基本方式起作用的......我做错了什么?

我需要做的是计算自更新到数据库以来的秒数...是否有更简单的方法可以做到这一点?

谢谢!

2 个答案:

答案 0 :(得分:5)

“时间”字段仅存储时间。不是约会对象 因此,您只能获得有效时间而非有效日期是合乎逻辑的。

如果您希望在数据库中存储日期和时间,则应进行以下迁移:

t.datetime :my_time_stamp

答案 1 :(得分:3)

Ruby没有无日期时间对象,因此它会将数据库中的无日历时间字段转换为某个任意日期的时间。 Ruby的Time对象编码自unix时代以来的秒数,因此它们包含日期。将它们存储在数据库中的正确方法是使用日期时间字段,或者如果您愿意,可以使用整数字段并存储Time.now.to_i