4

我正在尝试在不使用诸如paperclip. 这是视图:

 %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

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

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

我只是按照官方 Rails 指南进行操作,但仍然出现错误。任何人都可以提出一些解决方案吗?

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

4

1 回答 1

5

您将参数传递给的方式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.

于 2013-11-03T17:07:50.383 回答