Importer un fichier CSV avec Ruby On Rails

Importer un fichier CSV avec Ruby On Rails

Vous avez besoin d’importer les données présentes dans un fichier CSV (comma-separated values) vers votre application Ruby On Rails ? Cela peut être utile, par exemple, pour transférer des données vers une table de votre base de données. Regardons comment faire !

ruby-on-rails-tutoriel

 

Importer le fichier CSV via un formulaire

La première étape est d’importer le fichier CSV dans votre application Ruby On Rails. Pour cela, nous allons nous aider d’un formulaire permettant de poster le fichier vers une action qui effectuera les traitements souhaités. Le code du formulaire doit être présent dans une de vos vues, n’oubliez pas de créer une route prenant en charge la méthode post pour l’action cible du formulaire.

<%= form_tag('/contrôleur/action/', multipart: true) do %>
    <%= file_field_tag :file %>
    <%= submit_tag "Importer" %>
<% end %>

 

Traiter le fichier dans une action

Vous avez maintenant transféré le fichier vers l’application Rails. Il est temps d’en faire quelque chose. Pour cela, créez une action qui effectuera le traitement de votre fichier (par exemple, l’import dans la base de données) et commençons à coder !

Bonne nouvelle, Ruby On Rails nous vient avec tous les éléments nécessaires pour traiter les fichiers CSV, ils nous suffira d’importer le module Csv.

require 'csv'

Nous allons ensuite utiliser un bloc qui va permettre d’exécuter du code pour chaque ligne de votre fichier CSV. A noter que params[:file].path renvoie le chemin vers le fichier que vous avez posté via le formulaire précédent. Si vous avez utilisé un autre nom que « file » pour le champ du formulaire, à vous d’adapter le code. Notez également que ce code présente une version sans headers, c’est à dire que la première ligne de votre fichier CSV contient directement des données.

CSV.foreach(params[:file].path, headers: false) do |row|
     #code à effectuer
end

Imaginons que nous avons un fichier CSV contenant les noms et les prénoms des utilisateurs et que nous voulons ajouter ces données à notre table utilisateurs. Le code serait le suivant :

CSV.foreach(params[:file].path, headers: false) do |row|
    utilisateur = Utilisateur.new
    utilisateur.nom = row[0]
    utilisateur.prenom = row[1]
    utilisateur.save
end

Et voilà, lire un fichier CSV avec Ruby On Rails est aussi simple que cela ! Notez qu’en fonction du cas rencontré, il peut être préférable de placer ce code dans le modèle.

Article écrit par Bertrand Bourgy

Diplômé de la Louvain School of Management, je suis maître-assistant en sciences économiques et informatiques à la Haute Ecole Provinciale de Hainaut Condorcet. Je travaille également en tant qu'attaché à l'innovation et au développement dans la même Haute Ecole.

Trackbacks/Pingbacks

  1. Modifier un enregistrement ou le créer s’il n’existe pas avec Ruby On Rails ( first_or_initialize ) | e-Business one - […] pas dans la table, le tout en une ligne ? Une fonctionnalité utile, par exemple, dans un script d’importation. Pas…

Quelque chose à dire? Réagissez!

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *