0

こんにちは、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 installfastercsv を使用して gem をインストールしました

4

2 に答える 2

2

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
于 2011-02-28T12:11:59.813 に答える
1

それも機能します:

@rows = []
uploaded_io = params[:csv_file]
FCSV.new(uploaded_io.tempfile).each do |row|
 @rows << row
end
于 2011-08-23T21:15:43.460 に答える