簡體   English   中英

FasterCSV,用於在Rails中導入用戶

[英]FasterCSV for importing users in rails

嗨,我正在嘗試使用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安裝了gem

由於要上傳文件,因此必須將表單的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

它也可以工作:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM