2

我有一个在 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

我猜它在检索部分?这里发生了什么?

4

1 回答 1

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"
于 2010-05-03T20:59:05.117 回答