更智能的CSV和上传的CSV文件

时间:2014-01-28 03:57:03

标签: ruby-on-rails ruby csv import

对于我的申请,我将通过file_field_tag上传文件。如何将该文件与SmarterCSV一起使用?我尝试了类似这样的SmarterCSV.process(@file.tempfile.path),它只返回一个空数组,即使CSV中有数据。

有什么想法吗?

3 个答案:

答案 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"

分隔