我在Sqlite3上运行了一个简单的Rails 3.b1(Ruby 1.9.1)应用程序。我有这张桌子:
create_table :time_tests do |t|
t.time :time
end
我看到了这种行为:
irb(main):001:0> tt = TimeTest.new
=> #<TimeTest id: nil, time: nil>
irb(main):002:0> tt.time = Time.zone.now
=> Mon, 03 May 2010 20:13:21 UTC +00:00
irb(main):003:0> tt.save
=> true
irb(main):004:0> TimeTest.find(:first)
=> #<TimeTest id: 1, time: "2000-01-01 20:13:21">
所以,时间又回来了。检查表格,数据看起来没问题:
sqlite> select * from time_tests;
1|2010-05-03 20:13:21.774741
我想这是在检索部分?这是怎么回事?
答案 0 :(得分:4)
技术上,它不会变回空白。它以默认日期的时间返回。它返回2000-01-01 20:13:21
作为预期的时间。
Rails正在将一些神奇的数据加载到Time对象中并清除日期(因为你只告诉它存储时间)。
如果要存储日期和时间,则需要将列定义为datetime
。相反,如果您只想要约会,则可以使用date
。
所以回顾一下:
date => "2010-12-12 00:00:00"
time => "2000-01-01 13:14:15"
datetime => "2010-12-12 13:14:15"