12

Rails 3、JRuby 1.6.7.2

アプリで処理するためのフォームを介して単一のテキストファイルをアップロードするだけで、「基本的な」何かを試してみました。私が見ている問題は、StringIO または File の代わりに、ファイル名の文字列だけを取得していることです。

フォームコードはこちら

= form_tag(:controller => "api/#{CURRENT_API_VERSION}/api", :action => 'file', :method=> :post, :multipart => true) do
    = label_tag "file"
    = file_field_tag "upload[file]"
    = submit_tag 'Analyze!'

そして、ファイル名を含む文字列として @upload を与えているコントローラコード。

def file
        @upload = params[:upload][:file]
        render :template => 'api/file.html.haml'
      end

コントローラーでデバッガーを実行すると、@upload.class = String が返され、読み取りなどのファイルまたは StringIO メソッドに応答しません。

4

1 に答える 1

22

ここで答えを見つけました。form_tag メソッドの呼び出しを台無しにしていたことがわかりました。「url_for」用のオプションと他のオプション、特にマルチパート オプションを分離する必要があります。

したがって、フォームの正しいコードは次のとおりです。

= form_tag({:controller => "api/#{CURRENT_API_VERSION}/api", :action => 'file', :method=> :post}, {:multipart => true}) do
    = label_tag "file"
    = file_field_tag "upload[file]"
    = submit_tag 'Analyze!'

5 年前に ruby​​-forum でこれに答えてくれた Rob Biedenharn に感謝します! http://www.ruby-forum.com/topic/125637

于 2012-08-10T05:13:53.807 に答える