Time.new不能像我期望的那样工作

时间:2012-07-03 01:29:27

标签: ruby-on-rails ruby

我正在尝试生成一些种子材料。

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。

我在rails控制台中测试了Time.new(2012,6,2,2,20,45),它按预期工作。当我试图为我的数据库播种时,然而一些伏都教魔法发生了,我没有得到我想要的日期。

任何意见都表示赞赏。谢谢!

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

这是日志的一小部分样本。

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

这是rails控制台中显示的内容。

2 个答案:

答案 0 :(得分:2)

听起来您使用了:timestart_t的{​​{1}}类型。在该上下文中,时间是指纯时间数据类型,没有日期,因为这是SQL时间类型。

Ruby的end_t类型包含日期和时间,因此您的数据库列必须是:datetime。事实上,ruby没有纯粹的日间课程,所以activerecord使用常规时间而不是假日期。

答案 1 :(得分: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]]

更新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]}")