2013-03-13 3 views
0

Я искал весь этот форум для решения вышеуказанной проблемы, но все, что я пробовал, не работает. В принципе, у меня есть модельная библиотека с соответствующей таблицей библиотек в моей базе данных sqlite3. У меня есть файл csv с именем libraries.csv, который содержит все данные, которые я хочу импортировать в базу данных.Импорт CSV в существующую таблицу базы данных sqlite

Я попробовал метод во втором ответе на this page, но он все еще не работает. Я сделал так, чтобы создать свой файл грабли «import_libraries.rake в папке Lib/задачи, и я также был сохранен файл libraries.csv в этой папке, но я постоянно получаю сообщение об ошибке:

грабли прерванную!
Не знаю, как строить задачи «import_libraries» (см полную трассировку, выполнив задачу с --trace)

Это текущий код, я использую:

require 'csv' 
desc "Imports a CSV file into an ActiveRecord table" 
task :import, [:filename] => :environment do  
    CSV.foreach('libraries.csv', :headers => true) do |row| 
     Library.create!(row.to_hash) 
    end 
end 

Но когда я запускаю утилиту packex exec rake import_libraries, я получаю сообщение об ошибке выше.

Есть ли что-нибудь, что я делаю неправильно? я был бы признателен за вашу помощь ребятам. Благодаря

EDIT

я переименовал файл рек от import_libraries.rake только import.rake При управлении расслоением EXEC импортом грабель, сообщение об ошибке я теперь получаю:

рейки прервана! неверная последовательность байтов в UTF-8 C: /Users/username/rails_app_name/lib/tasks/import.rake: 4: in `block in 'Задачи: TOP => импорт (см. полную трассировку, выполнив задание с - след)

+1

Не могли бы вы опубликовать текущий код, который вы пытаетесь? – fmendez

+0

Прошу прощения. Я только что редактировал свой вопрос, чтобы включить код – muyiwamat

+0

Не могли бы вы разместить несколько строк файла '.csv'? – fmendez

ответ

0

я, наконец, решить эту проблему, используя этот код:

namespace :csv do 

    desc "Import CSV Data" 
    task :import => :environment do 

    require 'csv' 

    csv_file_path = 'lib/tasks/libraries.csv' 

    CSV.foreach(csv_file_path, headers: true) do |row| 
     row = Library.create!({ 
     :column_name1 => row[0], 
     :column_name2 => row[1], 
     :column_name3 => row[2], 
     . 
     . 
     :last_column => row[6] 
     }) 
     puts "Success!" 
    end 
    end 
end 
1

на основании ошибки вы получаете и задачи, которую вы определили, вы должны называть:

bundle exec rake import #=> you're currently calling import_libraries which indeed doesn't exist 

с rake вы называете task на основе имени вы даете задачи , а не на имя файла (помните, что у вас может быть много задач внутри каждого из этих файлов рейка).

+0

Привет, fmendez. Должен ли я в этом случае переименовать мой файл рейка для импорта? – muyiwamat

+0

Не обязательно. Вы можете назвать этот файл любым именем, которое вы хотите (оно должно быть в lib/task). Вы должны, для ясности, дать ему описательное имя. Когда дело доходит до выполнения задачи рейка, важно то, что вы используете имя, которое вы назначаете ему в 'task: name_you_assign_to_the_task' внутри файла .rake. – fmendez

+0

Привет. Посмотрите новое сообщение об ошибке, которое я сейчас получаю. благодаря – muyiwamat