2010-10-01 2 views
0

Я использую csv-mapper gem для импорта CSV-файла. Когда я использую код примера в README (http://github.com/pillowfactory/csv-mapper) в скрипте/консоли, он отлично работает. Тем не менее, когда я создаю веб-форму и использовать, чтобы загрузить файл CSV, я получаю сообщение об ошибке «Нет такого файла или каталога - test.csvCSV-Mapper Нет такого файла или каталога

Эти параметры: Параметры:

{» сваливают» => { "файл" => #}, "совершить" => "Отправить", "authenticity_token" => "Hb + XDPUGyZQqB5H2vZnhlfXpEE9bAE16kAjTT34uQ3U ="}

Вот что я для моего кода в контроллере:

def csv_import 
    results = CsvMapper.import(params[:dump][:file].original_filename) do 
    map_to Sale # Map to the Sale ActiveRecord class instead of the default Struct. 
    after_row lambda{|row, sale| sale.save } # Call this lambda and save each record after it's parsed. 

    start_at_row 1 
    [start_date, country] 
    end 
    flash[:notice] = "Successfully uploaded file" 
end 

ответ

2

Ошибка ожидается, потому что params[:dump][:file].original_filename возвращает имя файла загруженного CSV. Загруженный CSV должен быть сначала сохранен в файловой системе. Передайте путь к сохраненному CSV-файлу методу CsvMapper#import, тогда он должен работать.

См. here как сохранить загруженные файлы.

4

Это немного поздно, но вы также должны отметить, что импорт CsvMapper # принимает любое значение ввода-вывода, когда вы передаете ему параметр: type =>: io.

results = CsvMapper.import(params[:dump][:file], :type => :io) do ... end

Это позволит вам пропустить шаг сохранения файла перед импортом.

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