2011-07-05 10 views
5

He configurado un tipo MIME personalizado:CSV hace en vista de Safari, pero quiero que se descargue un archivo

ActionController::Renderers.add :csv do |csv, options| 
    self.content_type ||= Mime::CSV 
    self.response_body = csv.respond_to?(:to_csv) ? csv.to_csv : csv 
end 

y un bloque respond_to en mi controlador:

respond_to do |format| 
    format.html 
    format.csv { render :csv => csv_code} 
    end 

El uso de Firefox y Chrome , el .csv representa un archivo que se descarga. Usando Safari, el .csv se representa como una vista: ¿cómo puedo cambiar esto y forzarlo a descargarlo como un archivo?

Ver una captura de pantalla del problema:

enter image description here

Respuesta

9

Trate

respond_to do |format| 
    format.html 
    format.csv do 
     response.headers['Content-Type'] = 'text/csv' 
     response.headers['Content-Disposition'] = 'attachment; filename=thefile.csv'  
     render :csv => csv_code 
    end 
end 

si esto no funciona, trate de usar

send_file "path/to/file.csv", :disposition => "attachment" 
+0

Gracias. Los métodos de response.headers funcionan muy bien. –

0

La manera tengo este Trabajar en una aplicación antigua de Rails 2 es usar send_data en lugar de render en el controlador. P. ej .:

def csv 
    ... # build data 
    send_data csv_data_as_string, :filename => "#{filename}.csv", :type => 'text/csv' 
end 
Cuestiones relacionadas