4

などの宝石を使用せずに csv アップロード機能を実装しようとしてい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、すべての引数が2 番目のパラメーターの一部ではなく、最初のform_tagパラメーターの一部として扱われます( http://api.rubyonrails.org/classes/ActionView/Helpers/を参照)。 FormTagHelper.html#method-i-form_tagメソッド定義)。url_for_optionsoptions

http://guides.rubyonrails.org/form_helpers.html#uploading-filesのガイドに従って、次の構文を使用して目的を達成できます。

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

:methodデフォルトでは になっているため、設定する必要はありませんpost

于 2013-11-03T17:07:50.383 に答える