2015-01-08 2 views
2

Итак, я пытаюсь импортировать CSV-файл с RoR, который находится в следующем формате:CSV заголовки рядом с данными - Рельсы Импорт

header,data,header,data,header,data 

Примером может быть:

name,peter,age,12,birthplace,london 
name,john,age,30,birthplace,new york 

После того, как я импортировал файл, как я могу выделить заголовок, соответствующий базе данных. Порядок может отличаться каждый раз, и некоторые поля могут быть в CSV, а другие поля могут не совпадать. Как бы я поделал в своей модели, чтобы справиться с этим?

ответ

1

Вы можете сделать, как следующее:

all_attributes = [] 
CSV.foreach('path/to/file') do |row| 
    attributes = {} 
    row.each_with_index do |column, i| 
    next if i % 2 != 0 # skip every other column 
    attributes[column.to_sym] = row[i+1] 
    end 
    all_attributes << attributes 
end 

Этот код основан на том факте, что заголовок всегда 1 столбец перед значением.

+0

Хорошо, он работает, за исключением того, что он импортирует первую строку дважды с вашим точным кодом. Есть идеи? – doer123456789

+0

Я изменил 'CSV.open' на' CSV.foreach' @AdamEsterhuizen (doc: http://ruby-doc.org/stdlib-1.9.3/libdoc/csv/rdoc/CSV.html#class-CSV- label-A + Line + at + a + Time) – MrYoshiji

+0

Спасибо за помощь @MrYoshiji! – doer123456789

Смежные вопросы