对于我的申请,我将通过file_field_tag
上传文件。如何将该文件与SmarterCSV一起使用?我尝试了类似这样的SmarterCSV.process(@file.tempfile.path)
,它只返回一个空数组,即使CSV中有数据。
有什么想法吗?
答案 0 :(得分:4)
建议的答案不起作用。
如果你这样做:
clients_data = params[:file_categories]
clients = SmarterCSV.process(clients_data.tempfile, {:chunk_size => 1, :key_mapping => {:ca_id => :id, :ca_desc => :name}})
这很好用。您需要使用tempfile而不是original_filename。
答案 1 :(得分:1)
目前尚不清楚@file是什么,但是如果是从一个典型的形式并分配了类似的东西:
@file = params[:resource][:file_tag_name]
然后尝试:
SmarterCSV.process(@file.original_filename)
或使用CSV:
CSV.parse(@file.original_filename)
Rails在文件上传的params哈希中创建的对象是IO类的子类的实例,因此您需要到达底层文件以将其传递给SmarterCSV。
有关Rails如何处理文件上传的更多信息,请参阅http://guides.rubyonrails.org/form_helpers.html#what-gets-uploaded
答案 2 :(得分:1)
SmarterCSV.process(@ file.original_filename)将无法正常工作,因为它正在查找存储文件的位置。
您需要使用
SmarterCSV.process(params [:file] .tempfile,{:col_sep =>" \ t",:row_sep =>" \ n"})
使用制表符分隔数据" \ t"并且行由新行" \ n"
分隔