Поля времени в Rails возвращаются пустыми - PullRequest
2 голосов
/ 04 мая 2010

У меня есть простое приложение Rails 3.b1 (Ruby 1.9.1), работающее на Sqlite3. У меня есть эта таблица:

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

Полагаю, это на поисковой части? Что здесь происходит?

1 Ответ

4 голосов
/ 04 мая 2010

Технически , он не возвращается пустым. Возвращается как время с датой по умолчанию. Возвращает 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"
...