sqlite3数据库中的日期在Rails中返回为nil

时间:2016-04-12 19:03:35

标签: ruby-on-rails ruby sqlite

我一直在试图弄清楚如何制作这个问题,所以谷歌会给我一个相关的结果,因为它必须是一个非常简单的东西,我很想念。我使用命令创建了一个简单的表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浏览数据库并查看所有内容:

data sample

但是当我使用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">]> 

知道我的日期为零的原因吗?他们肯定在数据库中,我不明白为什么它会理解某些日期而不是其他日期?我错过了什么?

2 个答案:

答案 0 :(得分:0)

我修好了它但它似乎很奇怪它没有用。我尝试将CS​​V文件更改为:

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_atupdated_at列之间的格式不匹配。尝试将sick_day中的年份格式更改为两位数年份,看看是否有效。

此外,通常最好允许Rails为您设置created_atupdated_at时间戳。您可以通过编写导入器脚本并使用rails runner(例如)运行它来完成此操作,但这不在原始问题的范围内。