2012-07-03 2 views
0

Я пытаюсь сгенерировать материал семян.Time.new не работает, как я ожидал

seed_array.each do |seed| 
    Task.create(date: Date.new(2012,06,seed[1]), start_t: Time.new(2012,6,2,seed[2],seed[3]), end_t: Time.new(2012,6,2,seed[2] + 2,seed[3]), title: "#{seed[0]}") 
end 

В конечном итоге я поставлю случайные часы, минуты, секунды. Проблема, с которой я столкнулась, заключается в том, что вместо создания времени с датой 2012-06-02 оно создает время с другой датой: 2000-01-01.

Я проверил Time.new(2012,6,2,2,20,45) в консоли rails и работает так, как ожидалось. Когда я пытаюсь засеять мою базу данных, однако происходит какая-то магия вуду, и я не получаю дату, которую хочу.

Любые входы оцениваются. Спасибо!

Update1:

(0.0ms) begin transaction SQL 
(0.5ms) INSERT INTO "tasks" ("created_at", "date", "description", 
    "end_t", "group_id", "start_t", "title", "updated_at") VALUES (?, ?, 
    ?, ?, ?, ?, ?, ?) [["created_at", Tue, 03 Jul 2012 02:15:34 UTC 
    +00:00], ["date", Thu, 07 Jun 2012], ["description", nil], 
    ["end_t", 2012-06-02 10:02:00 -0400], ["group_id", nil], 
    ["start_t", 2012-06-02 08:02:00 -0400], ["title", "99"], 
    ["updated_at", Tue, 03 Jul 2012 02:15:34 UTC +00:00]] 
(2.3ms) commit transaction 

Это небольшой образец журнала.

Update 2

Task id: 101, date: "2012-06-26", start_t: "2000-01-01 08:45:00", end_t: "2000-01-01 10:45:00", title: "1", description: nil, group_id: nil, created_at: "2012-07-03 02:15:33", updated_at: "2012-07-03 02:15:33" 

Это то, что отображается в рельсах консоли.

+0

Что такое сгенерированный SQL из журнала? –

+0

@ MarkThomas Я включил журнал. Кажется, моя проблема заключалась в отображении времени. Спасибо, Марк! Вы указали новичку в правильном направлении. –

+0

@MarkThomas Woops Я говорил в ближайшее время. Проблема заключалась не в отображении времени. Когда я перехожу к консоли rails, и я нажимаю Task.all, я вижу, что данные не были сохранены должным образом. –

ответ

2

Похоже, вы использовали :time тип для вашего start_t и end_t. В этом контексте время относится к типу чистого времени суток, без даты, потому что это то, что тип времени SQL.

Тип Ruby's Time охватывает и дату и время, поэтому ваш столбец базы данных должен быть: datetime. На самом деле рубин не имеет чистого времени в дневном классе, поэтому activerecord использует обычное время с фиктивной датой.

+0

Я изменил его to: datetime и работает так, как ожидалось. Спасибо! –

0

Я проверил ваш код, как это:

arr = [1,2,3] 

arr.each do |seed| 
    Timetest.create(time: Time.new(2012,6,2,2,20,45), title: "#{seed}") 
end 

И его работы, как и ожидалось. Но я получил это SQL на моей консоли и ее немного по-другому, чем у вас в вашем start_t и end_t

SQL (4.1ms) INSERT INTO "timetests" ("created_at", "time", "title", "updated_at") VALUES (?, ?, ?, ?) [["created_at", Tue, 03 Jul 2012 02:11:35 UTC +00:00], ["time", Sat, 02 Jun 2012 07:20:45 UTC +00:00], ["title", "1"], ["updated_at", Tue, 03 Jul 2012 02:11:35 UTC +00:00]] 

Update 1

Пытались использовать DateTime.new вместо Time.new?

Task.create(date: DateTime.new(2012,06,seed[1]), start_t: DateTime.new(2012,6,2,seed[2],seed[3]), end_t: DateTime.new(2012,6,2,seed[2] + 2,seed[3]), title: "#{seed[0]}") 
+0

Вы можете найти его под обновлением 2. Это не выглядит нормально. Это экономит его как 2000 –

+0

Какая у вас версия RoR? Я замечаю, что в вашем sql вы вставляете другие форматы для даты. «start_t» \t, 2012-06-02 08:02:00 -0400 «updated_at», вт, 03 июл 2012 02:15:34 UTC +00: 00 Когда я пробую его с рубином 1.9.3 мой sql выглядит так: SQL (4.1ms) INSERT INTO «timetests» («created_at», «time», «title», «updated_at») VALUES (?,?,?,?) [["created_at", Вт, 03 июл 2012 02:11:35 UTC +00: 00], ["time", Sat, 02 Jun 2012 07:20:45 UTC +00: 00], ["title" , "1"], ["updated_at", Вт, 03 июл 2012 02:11:35 UTC +00: 00]] –

+0

Я использую рельсы 3.2.3 и Ruby 1.9.3 –