export csv en rails

Cet article va vous montrer comment ajouter un bouton d’export CSV sur votre application rails.
Vous allez voir c’est très simple.
Il faut commencer par importer la bibliothèque csv dans votre fichier config/application.rb comme suit :

require 'rails/all'
require 'csv'

Ensuite on implémente une méthode de classe as_csv dans le modèle en question :

def self.as_csv
  CSV.generate do |csv|
    csv << column_names
    all.each do |item|
      csv << item.attributes.values_at(*column_names)
    end
  end
end

Ce code va exporter toutes les données avec tous les attributs du modèle. Si vous voulez faire des filtres sur le modèle pour n'afficher que les attributs nomprenom et email vous pouvez écrire le code suivant :

def self.as_csv
  CSV.generate do |csv|
    colonnes = %w(prenom nom email)
    csv << colonnes
    all.each do |item|
      csv << item.attributes.values_at(*colonnes)
    end
  end
end

Tout ce qui reste à faire c'est d'ajouter ce bout de code à votre contrôleur pour qu'il prenne en compte l'extension csv.

def index
  @users = User.all

  respond_to do |format|
    format.html
    format.csv { send_data User.as_csv }
  end
end

Voilà c'est tout. Si vous accédez à l'URL http://localhost:3000/users.csv une belle fenêtre s'ouvrira pour vous proposer d'enregistrer votre fichier CSV qui contient la liste de tous les utilisateurs 🙂