2015-01-07 4 views
2

Я новичок в RoRRails CSV импорт с странным форматом

Я знаю, как загрузить файл CSV в мою базу данных, но файл CSV, который я имею в странном формате, вместо заголовков в заголовке столбце заголовок находится в передней части данных, как это:

Name:Peanut,Age:17,State:NY 
Name:Donkey,Age:23,State:NY 
Name:Flower,Age:18,State:NY 

Другая проблема заключается в некоторые строки не имеют все данные, поэтому не в том же порядке, как это:

Name:Peanut,Age:17,State:NY 
Name:Donkey,State:NY 
Age:18,State:NY 

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

+0

- это те же ценности, что и ваша база данных? – Anthony

+0

@ Энтони, да, это – doer123456789

ответ

2

При создании объектов, вы действительно просто передать в хэш-значений, как это:

User.create(name: "Some name", age: 18) 

Вы можете использовать рубиновый скрипт так:

require 'CSV' 
CSV.foreach('users.csv') do |line| 
    user = line.each_with_object({}) do |val, hash| 
    vals = val.split(':') 
    hash[vals.first] = vals.last 
    end 
    User.create(user) 
end 

Я просто здание хэш-значений, которые выглядят следующим образом:

{"Name"=>"Peanut", "Age"=>"17", "State"=>"NY"} 
{"Name"=>"Donkey", "Age"=>"23", "State"=>"NY"} 
{"Name"=>"Flower", "Age"=>"18", "State"=>"NY"} 

Я посылаю эти значения в User.create вызова. Что касается ваших недостающих данных, это будет проблемой только в том случае, если у вас есть валидации на вашей модели (то есть validates :age, presence: true), в противном случае, если вы не придадите ей значения, она будет просто нулевой в вашей базе данных (что было бы точным, не предоставляемые данные).

+0

спасибо большое !!!! – doer123456789

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