Загрузка файла в 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, такие как чтение.
Ответы
Ответ 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