2010-05-03 2 views
2

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

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

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

Ах, хорошо, я вижу, как он висит вместе. Единственная странная часть состоит в том, что она не симметрична - я бы схватил ее все намного быстрее, если бы она также удалила часть без изменений даты на пути в БД. – 2010-05-03 21:53:23

Смежные вопросы