Подтвердить что ты не робот

Загрузка файла в Rails дает имя файла String вместо объекта File или StringIO

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, такие как чтение.

4b9b3361

Ответ 1

Нашел ответ здесь. Оказывается, я просто набрал метод метода 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!'

Спасибо Rob Biedenharn за ответ на этот пять лет назад на рубиновом форуме! http://www.ruby-forum.com/topic/125637