0

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

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 控制台中进行了测试,它按预期工作。当我尝试为我的数据库播种时,发生了一些巫术魔术,我没有得到我想要的日期。

任何输入表示赞赏。谢谢!

更新1:

(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 控制台中显示的内容。

4

2 回答 2

2

听起来您将:time类型用于start_tand end_t。在这种情况下,时间指的是纯时间数据类型,没有日期,因为这就是 SQL 时间类型。

Ruby 的Time类型涵盖日期和时间,因此您的数据库列需要是 :datetime。事实上,ruby 没有纯时间类,因此 activerecord 使用带有虚假日期的常规时间。

于 2012-07-03T07:23:49.310 回答
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]}")
于 2012-07-03T02:22:10.613 回答