我一直在试图弄清楚如何制作这个问题,所以谷歌会给我一个相关的结果,因为它必须是一个非常简单的东西,我很想念。我使用命令创建了一个简单的表Rails应用程序:
rails g scaffold sick name:text sick_day:date shift:text hours:decimal
我跑了rake db:migrate
,效果很好。然后我在Firefox中使用SQLite Manager来导入数据。以下是CSV文件的前三行:
name,sick_day,shift,hours,created_at,updated_at
"Doe, Jane",3/3/2015,C,24,4/12/16,4/12/16
"Smith, John",1/20/2015,C,4,4/12/16,4/12/16
"Smith, John",3/27/2015,C,24,4/12/16,4/12/16
我使用Excel插入created_at和updated_at日期,因为它们是not_null字段。它很棒。我可以使用SQLite Manager浏览数据库并查看所有内容:
但是当我使用rails控制台查询数据库时,我得到:
Sick Load (3.2ms) SELECT "sicks".* FROM "sicks" LIMIT 3
=> #<ActiveRecord::Relation [
#<Sick name: "Doe, Jane", sick_day: "2015-03-03 00:00:00", shift: "C", hours: 24.0, created_at: "2004-12-16 00:00:00", updated_at: "2004-12-16 00:00:00">,
#<Sick name: "Smith, John", sick_day: nil, shift: "C", hours: 4.0, created_at: "2004-12-16 00:00:00", updated_at: "2004-12-16 00:00:00">,
#<Sick name: ""Smith, John", sick_day: nil, shift: "C", hours: 24.0, created_at: "2004-12-16 00:00:00", updated_at: "2004-12-16 00:00:00">]>
知道我的日期为零的原因吗?他们肯定在数据库中,我不明白为什么它会理解某些日期而不是其他日期?我错过了什么?
答案 0 :(得分:0)
我修好了它但它似乎很奇怪它没有用。我尝试将CSV文件更改为:
path_repr
并重新导入它,但它仍然无法正常工作。然后我使用Excel更改格式并将其转换为格式为实际的文本列:
def add_to_tuple(prev,new):
return prev+(new,) #prev is a tuple, add in the new element to the tuple
for path,value in traverse(doc,(),add_to_tuple): #prev_path is initially an empty tuple
print("{} = {}".format(path,value))
并重新导入。现在Rails很高兴。 ???
答案 1 :(得分:0)
您的sick_day
列与created_at
和updated_at
列之间的格式不匹配。尝试将sick_day
中的年份格式更改为两位数年份,看看是否有效。
此外,通常最好允许Rails为您设置created_at
和updated_at
时间戳。您可以通过编写导入器脚本并使用rails runner
(例如)运行它来完成此操作,但这不在原始问题的范围内。