FasterCSV для импорта пользователей в рельсы - PullRequest
0 голосов
/ 28 февраля 2011

HI, Я пытаюсь использовать FasterCSV для импорта пользователей из файла CSV

У меня есть

<form action='/users/bulk_create' method='post'>
   <%= file_field_tag "csv_file" %><br/>
   <%= submit_tag("Import") %>
</form>

В моем контроллере пользователей у меня есть метод, подобный

   def bulk_create
         login, password, name, email = 0, 1, 2, 3
     require 'fastercsv'
          parsed_rows=FasterCSV.parse(params[:csv_file])
           parsed_rows.each do |row|
            puts "#{row[name]}"
           end
   end

Когда я делаю вышеизложенное и проверяю его в журнале, я получаю сообщение об ошибке как

 NoMethodError (undefined method `pos' for nil:NilClass):
 app/controllers/users_controller.rb:688:in `bulk_create'

FasterCsv вообще не читает файл. Как заставить это читать Я установил гем с помощью sudo gem install fastcsv

Ответы [ 2 ]

2 голосов
/ 28 февраля 2011

Поскольку вы загружаете файл, вы должны указать атрибут enctype для вашей формы как multipart/form-data

<form action='/users/bulk_create' method='post' enctype='multipart/form-data'>

Во-вторых, вы не можете передать params[:csv_file] напрямую в FasterCSV, вам необходимо проверить работоспособностьданные и затем сохраните их как файл CSV.

Посмотрите здесь, http://www.tutorialspoint.com/ruby-on-rails/rails-file-uploading.htm, который дает основы загрузки файлов.Я настоятельно рекомендую посмотреть на плагин для загрузки файлов, например " Paperclip " или тому подобное.

Затем после сохранения файла и документов для «FasterCSV» предложите

#Reading
#From a File
#A Line at a Time

FasterCSV.foreach("path/to/file.csv") do |row|
  # use row here...
end
1 голос
/ 24 августа 2011

Так же работает:

@rows = []
uploaded_io = params[:csv_file]
FCSV.new(uploaded_io.tempfile).each do |row|
 @rows << row
end
...