Какой тип данных я указываю при переносе, чтобы импортировать дату из CSV с помощью FasterCSV? - PullRequest
0 голосов
/ 03 декабря 2011

Fellow Overflowers,

У меня есть CSV-файл с разделителями табуляции, который содержит даты в следующем формате: 30-11-2011 2:24

Я анализирую CSV с помощью FasterSCV gem.Я создал миграцию, которая хранит эту информацию как datetime.Должен ли я делать это или определить это как string и позволить Ruby преобразовывать его каждый раз, когда я получаю его?

Нужно ли мне определять некоторые преобразователи FasterCSV?

Спасибо...

1 Ответ

0 голосов
/ 03 декабря 2011

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. Но обратите внимание на часовой пояс в конце метода разбора

Когда вы заполняете базу данных, используйте файл seed.rb в вашей папке db. Я обычно делаю текстовый файл в папке db, использую мой редактор и заменяю все вкладки знаком "|" и сделать массив каждой строки Допустим, это выглядит так (при условии, что это список задач)

файл todo

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

файл seed.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

Создайте магию рубина! Я не проверял этот код, но он может подтолкнуть вас в правильном направлении

...