Time fields in Rails coming back blank

2019-07-17 05:53发布

I have a simple Rails 3.b1 (Ruby 1.9.1) application running on Sqlite3. I have this table:

create_table :time_tests do |t|
  t.time :time
end

And I see this behavior:

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">

So, the time is coming back blank. Checking the table, the data looks OK:

sqlite> select * from time_tests;
1|2010-05-03 20:13:21.774741

I guess it's on the retrieval part? What's going on here?

1条回答
叛逆
2楼-- · 2019-07-17 06:28

Technically, it's not coming back blank. It comes back as a time with a default date. It returns 2000-01-01 20:13:21 as the time, which is expected.

Rails is doing some magic loading of the data into a Time object and clearing out the date (since you only told it to store the time).

If you want to store the date and time then you need to define the column as a datetime. And conversely, if you wanted just a date you would use date.

So to recap:

date => "2010-12-12 00:00:00"
time => "2000-01-01 13:14:15"
datetime => "2010-12-12 13:14:15"
查看更多
登录 后发表回答