Rails faire une méthode qui s’appliquera sur le résultat d’une requête d’une classe (un activerelation d’instances activerecord de cette classe)

Si vous souhaitez pouvoir faire quelque chose comme exporter le résultat d’une recherche d’une classe en csv avec tous les attributs de l’objet en 2 temps 3 mouvements et le faire sur différentes requêtes voici une petite astuce.

Petite info nous allons utiliser Rails5 mais cela est valable pour Rails4 à ceci prêt que la définition de la classe change un peu mais vous pouvez reprendre la méthode uniquement.

Prenez votre classe par exemple la classe MonObjet avec l’attribut titre dans le model faîtes une définition de méthode de classe comme ceci :

On voit ici le mot clé « all », ce mot clé indique que nous allons traiter chacun des éléments de l’activerecord et non pas forcément toutes les instances en BDD de notre model mais bien les instances de l’activerecord sur lequel nous allons appelés notre méthode « to_csv ».

Il vous suffit alors dans un controler de faire :

Ici on effectue une requête pour retrouver les objets dont le titre contient la valeur passer en paramètre et nous appliquons la méthode « to_csv » sur les résultats de cette requête.

Voilà une méthode simple qui peut vous permettre de factoriser du code d’export csv après on peut imaginer passer en paramètres à la fonction « to_csv » la liste des attributs de l’objet à exporter ou encore des contraintes supplémentaires de transformation de format pour les dates etc….

Julien

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée.

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.