Cómo generar ficheros CSV en Ruby on Rails

Hoy os vamos a hablar de FasterCSV, una nueva gema que hemos descubierto recientemente y que nos permite generar y leer ficheros CSV en Ruby on Rails de una forma muy sencilla.

Las principales características de FasterCSV son:

  • Es significativamente más rápida que la biblioteca CSV estándar de Rails
  • El código necesario para generar un fichero CSV es pequeño y fácil de mantener
  • Respeta de forma estricta la definición del formato CSV de la RFC

Para utilizarla, lo primero que tenemos que hacer, lógicamente, es instalar la gema:

sudo gem install fastercsv

A continuación, incluye la referencia a la biblioteca en tu controlador:

require 'faster_csv'

Y ahora viene el código en cuestión:


respond_to do |format|
format.csv {
report = FasterCSV.generate do |csv|
# header row
csv << ["Animal", "Class", "Type", "Set", "Date"]

# data rows
@vaxines.each do |vaxine|
csv << [ vaxine.animal.code,
vaxine.class_of_vaxine,
vaxine.type_of_vaxine,
vaxine.set,
vaxine.vaxined_at.strftime("%d/%m/%Y") ]
end
end

send_data report,
:type => 'text/csv; charset=iso-8859-1; header=present',
:disposition => "attachment; filename=vacunas.csv"

}

Como verás, el código lo hemos insertado dentro de un bloque format, para que se ejecute cuando el usuario hace una petición CSV, pero lo puedes insertar en cualquier parte de tu controlador.

La secuencia de pasos es sencilla. Primero generamos un objeto de la clase FasterCSV y luego, simplemente, vamos insertando un vector por cada fila que queremos añadir en el fichero. Evidentemente, la primera fila es la cabecera con los nombres de los campos. Luego procedemos a añadir los datos.

Y eso es todo. Ahora toca generar ficheros CSV a mansalva en nuestros proyectos y que los clientes personalicen sus informes en su hoja de cálculo favorita :)

Añade tu comentario