views:

65

answers:

1

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?

+2  A: 

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"
Tony Fontenot
Ah, ok, I see how it hangs together now. The only weird part is that it's not symmetrical - I'd have grasped it all a lot faster if it had stripped out the unmapped date part on the way into the DB too.
Isaac Cambron