2012-08-10 6 views
12

Rails 3, JRuby 1.6.7.2de carga de archivos en Rails da cadena de nombre de archivo en lugar de archivo u objeto StringIO

He estado tratando de algo "elemental", acaba de subir un archivo de texto a través de un formulario para su procesamiento en mi aplicación El problema que estoy viendo es que en lugar de un StringIO o archivo, obtengo solo una cadena del nombre del archivo.

Aquí está el código del formulario

= 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!' 

Y el código del controlador que se me acaba dando @upload como una cadena que contiene el nombre del archivo.

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

ejecutar el depurador en el controlador me da @ upload.class = cadena de caracteres, y no responde a cualquier archivo o métodos StringIO, tales como leer.

Respuesta

21

Encontré la respuesta aquí. Resulta que acababa de fastidiar la llamada al método form_tag. Debe separar las opciones que están destinadas para "url_for" y las otras opciones, específicamente la opción de varias partes.

Así que el código correcto para la forma es:

= 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!' 

Gracias a Rob Biedenharn para responder a esta hace cinco años en rubí foro! http://www.ruby-forum.com/topic/125637

+0

Igual que 'form_tag ({: controller =>" api/# {CURRENT_API_VERSION}/api ",: action => 'file',: method =>: post},: multipart => true)' – fangxing

Cuestiones relacionadas