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 install fastercsv 安装了 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它提供了文件上传的基础知识。我强烈建议您查看“回形针”之类的文件上传插件。

然后在您保存文件后,“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 回答