我在迁移中指定哪种数据类型,以便使用FasterCSV从CSV导入日期?

时间:2011-12-02 20:55:04

标签: ruby-on-rails sqlite ruby-on-rails-3.1 fastercsv

Overflowers,

我有一个制表符分隔的csv文件,其中包含以下格式的日期: 30-11-2011 2:24

我用FasterSCV gem解析csv。我创建了一个迁移,将此信息存储为datetime。我应该这样做还是将其定义为string并让Ruby每次检索它时都将其转换?

我是否需要定义一些FasterCSV转换器?

...谢谢

1 个答案:

答案 0 :(得分:0)

DateTime有点棘手。是有严格的格式

irb(main):008:0> DateTime.now
=> Fri, 02 Dec 2011 22:14:57 +0100

但你可以这样做

irb(main):015:0> t = DateTime.parse("30-11-2011 2:24").utc
=> Wed, 30 Nov 2011 02:24:00 +0000
irb(main):016:0> t.class
=> DateTime

现在你有一个DateTime对象。但是,请注意解析方法结束时的时区

填充数据库时,请使用db文件夹中的seeds.rb文件。 我通常在db文件夹中创建一个文本文件,使用我的编辑器并用“|”替换所有选项卡并创建每行的数组 让我们说它看起来像这样(假设它是一个待办事项清单)

todo文件

make hay|30-11-2011 2:24
fix tractor|24-11-2011 2:14

seeds.rb文件

open("db/todo") do |todos|
  todos.read.each_line do |todo|
    n = todo.chomp.split("|")
    Todo.create!(:entry => n[0], :at_date => DateTime.parse("#{n[1]}").utc)
  end
end

然后运行

rake db:seed

制作一些红宝石魔法! 我没有测试过这段代码,但它可能会让你朝着正确的方向前进