我正在尝试生成一些种子材料。
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控制台中显示的内容。
答案 0 :(得分:2)
听起来您使用了:time
和start_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]}")