2011-01-03 17 views
14

Deseo otorgar a mis usuarios la capacidad de exportar una tabla a CSV.Rieles: exportación de CSV: solicitud de descarga de archivos

Así que en mi controlador, he añadido en la parte superior del archivo:

respond_to :html, :js, :csv 

También estoy fijando los encabezados si el formato solicitado es csv:

if params[:format] == 'csv' 
    generate_csv_headers("negotiations-#{Time.now.strftime("%Y%m%d")}") 
end 

Código de generate_csv_headers (en application_controller) es:

def generate_csv_headers(filename) 
    headers.merge!({ 
     'Cache-Control'    => 'must-revalidate, post-check=0, pre-check=0', 
     'Content-Type'    => 'text/csv', 
     'Content-Disposition'  => "attachment; filename=\"#{filename}\"", 
     'Content-Transfer-Encoding' => 'binary' 
    }) 
    end 

también he creado una vista llamada index.csv.erb para generar mi archivo:

<%- headers = ["Id", "Name"] -%> 
<%= CSV.generate_line headers %> 
<%- @negotiations.each do |n| -%> 
<%- row = [ n.id, 
      n.name ] -%> 
<%= CSV.generate_line row %> 
<%- end -%> 

que no tienen ningún error, sino que simplemente muestra el contenido del archivo CSV, mientras que yo esperaría un indicador del navegador para descargar el archivo.

He leído mucho, pero no he encontrado nada que funcione. ¿Tiene una idea?

gracias, p.

+0

Algunos buena discusión sobre este tema en [este hilo SO] (http://stackoverflow.com/questions/94502/in-rails-how-to-return-records-as-a-csv -file) – zetetic

Respuesta

10

Todavía no estoy seguro de por qué esto solucionó el problema, pero lo hizo.

he cambiado el enlace en la vista para

<%= link_to "Export to csv", request.parameters.merge({:format => :csv})%> 

y ahora funciona!

0

Puede que le interese esta gema que hice llamada formadora CSV que le permite crear una salida CSV utilizando un Ruby DSL realmente agradable.

También controlará la configuración correcta de los encabezados de respuesta, al tiempo que permite la personalización del nombre de archivo.

https://github.com/paulspringett/csv_shaper

Cuestiones relacionadas