String的未定义方法`original_filename’

我正在尝试实现csv上传function而不使用诸如paperclipgem。 这是观点:

  %h1 Add Users From CSV = form_tag(:action => "upload",:multipart => true,:method => :post) do = file_field_tag 'csv' = submit_tag 'Upload' 

这是控制器:

 def upload csv_io = params[:csv] File.open(Rails.root.join('public', 'uploads', csv_io.original_filename), 'wb') do |file| file.write(csv_io.read) end redirect_to root_path, :notice => "Successfully uploaded csv!" end 

但是当我上传名为data.csv的csv时,我收到此错误消息

 undefined method `original_filename' for "data.csv":String 

我只是按照官方的Rails指南,但它仍然出错。 谁能提出一些解决方案?

注意:我只需要从csv文件中读取数据,而不需要在服务器上持久保存。

您将参数传递给form_tag ,所有参数都被视为第一个form_tag参数url_for_options ,而不是部分地参与第二个参数options (请参阅http://api.rubyonrails.org/classes/方法定义的ActionView / Helpers / FormTagHelper.html#method-i-form_tag )。

根据http://guides.rubyonrails.org/form_helpers.html#uploading-files中的指南,您可以使用以下语法来实现您的目标:

 form_tag({:action => "upload"},:multipart => true) 

您不需要设置:method因为它默认post