Bonjour à tous,
Promis je ne vais pas vous montrer comment ChatGPT peut répondre aux utilisateurs à votre place mais plutôt une manière plus conventionnelle de le faire en Ruby on Rails. En revanche je ne manquerais pas de faire appel à lui pour m’aider à vous expliquer les structures de données récursives !
Au programme :
Rappel sur les structures de données récursives
Dans quel cas pouvons-nous en avoir besoin sur nos apps Rails
Implémentation du formulaire
Bonus : Chez nous, c’est dojo tous les derniers mardis du mois !
Bienvenue sur la 3ème édition de Ruby Biscuit.
Vous êtes maintenant 64 abonnés 🥳 Si vous n’êtes pas déjà inscrit :
Rappel sur les structures de données récursives
En programmation informatique et théorie des types, un type récursif est un type de données dont la définition fait appel au type lui‐même, de façon récursive. Cela permet entre autres des structures de données qui contiennent des sous‐structures du même type.
Pour comprendre cette notion, j’ai fait appel à notre nouvel ami ChatGPT, je lui ai demandé : Comment expliquerais-tu les structures de données récursive à un enfant ?
Voici sa réponse :
Imagine que tu as un grand arbre dans ton jardin. L'arbre est très grand et il a beaucoup de branches. Chacune de ces branches est comme un petit arbre qui est attaché au grand arbre. Et chaque petit arbre a encore des branches et ces branches sont encore comme des petits arbres. C'est comme ça jusqu'en bas, où il n'y a plus de branches. C'est ce qu'on appelle une structure de données récursive. C'est comme une chose qui est composée de plusieurs copies de la même chose, comme des petits arbres dans un grand arbre.
Flippant ou impressionnant ? Je ne sais pas, mais très clair !
Dans quel cas pouvons-nous en avoir besoin sur nos apps Rails
Un client nous a récemment demandé la refonte de son formulaire de support. Ce formulaire, utilisé pour répondre aux questions relatives à la plateforme, était assez simple. L’utilisateur choisissait dans une liste, le sujet de sa demande puis il remplissait des champs texte avant de soumettre le formulaire.
Il a été remarqué que certaines des demandes des utilisateurs étaient récurrentes et pouvaient être résolues facilement, sans l’intervention des équipes support.
Suite à cette observation, le client nous a exprimé son besoin d’avoir un formulaire complet qui guiderait l’utilisateur vers des réponses toute faite dans le cas d’une question fréquente et en fonction du besoin de l’utilisateur.
Cette démarche visait un objectif double : réduire la charge de travail pour les équipes supports et offrir une solution plus rapide aux utilisateurs.
Les consignes pour le nouveau formulaire sont les suivantes :
L’administrateur doit avoir une flexibilité totale sur l’arborescence : c’est-à-dire les questions et les réponses proposées.
Chaque réponse sélectionnée peut déboucher sur une autre question, ou sur une réponse.
Voici une schématisation du besoin :
Pour l’exemple j’utiliserais une version simplifiée du besoin client initial
C’est dans cette problématique que nous avons fait le choix d’implémenter un formulaire fait d’une structure de données récursive, et je vais vous détailler son implémentation.
Implémentation du formulaire
Pour l’exemple je pars d’une application Rails avec Devise, Active Admin et une base de données Postgresql.
Nous allons partir d’un modèle SupportStep qui représentera chaque étape de notre formulaire. Chacune des étapes (instances de SupportStep) devra pouvoir être le parent et/ou l’enfant d’une autre instance de ce même objet.
Pour gérer les relations parents-enfants entre nos instances nous allons utiliser la gem acts_as_tree.
Cette gem tirée d’un dépôt Github initialement crée par DHH, va nous permettre de créer une structure hiérarchique d'objets et de les manier facilement grâce aux différentes méthodes qu’elle nous offre.
J’enchaîne en créant ma table support_steps
en base de données.
J’ajoute parent_id
qui est la colonne de clé étrangère attendue par défaut dans la gem et une position pour ordonner mes étapes.
Puis je créer mon modèle
Faisons un tour en console pour voir ce que la gem nous offre
Ici je me contenterai de ces méthodes, mais d’autres sont disponibles. Il en existe par exemple pour retourner la liste des descendants à partir d’un objet spécifié, ou pour passer une query Active Record ce qui peut s’avérer très utilise dans les vues.
Coté administrateur (avec Active Admin), je crée la ressource SupportStep
J’ajoute un formulaire pour que les administrateurs aient la main sur les différentes étapes. Ils pourront préciser quel est le parent de la nouvelle étape, son contenu et sa position.
Je créer une étape avec mon formulaire, et je regarde le changement en console
Pour permettre aux admins de modifier facilement la position des étapes, nous ajoutons une petite touche finale : La gem active_admin-sortable_tree.
En seulement quelques lignes de code elle nous permettra de changer l’arborescence du formulaire grace à un système de drag & drop.
J’installe la gem
Puis plus que quelques lignes dans ma ressource SupportStep sur active admin
TADAMM 🪄
Et pour en avoir le cœur net, je vérifie une dernière fois dans ma console
À présent notre client peut lui même créer et organiser ses étapes en se servant du contenu comme question, proposition de réponse, ou réponse détaillée. Il sera en mesure d’affiner le besoin de son utilisateur pour l’aider dans son utilisation de l’app !
Pour découvrir des nouveaux tips Ruby on Rails tous les mercredis à 16h, ne cherche plus, tu es au bon endroit !
Bonus : Chez nous, c’est dojo tous les derniers mardis du mois !
Si vous avez appris des choses, nous aussi ! Le cas client que je viens de vous exposer nous avait été présenté par Thierry lors d’un de nos récents dojos.
Chez Capsens, le dojo est une tradition instaurée depuis plusieurs années puis maintenu et entretenu au fil du temps par Robert. Il consiste à regrouper les développeurs une fois par mois pour se présenter des sujets techniques (et pas que). Du tooling, des processus de travail, de nouveaux frameworks, des retours d'expériences qui ont permis de résoudre un problème ou optimiser du travail, etc. Libre à nous de choisir notre sujet !
Pour vous donner quelques exemples, parmi les derniers dojos Victor nous à présenté comment il à résolu le jeu du chien fou en ruby, Andrew nous a donné un cours d’anglais pour éviter les fautes les plus fréquentes afin d’améliorer les noms des méthodes et variables ou encore David nous a présenté le Single-Sign-On (SSO).
Les dojos ont été mis en place pour nous encourager à faire de la recherche sur des sujets qui nous intéressent et qui peuvent intéresser les autres, pour apprendre à mieux s'exprimer, pour transmettre nos connaissances, pour monter en compétences et pour développer notre culture générale dans le milieu de la tech.
Depuis peu de temps, nous avons décidé de profiter aussi de ces moments pour parler et débattre de notre nouvelle norme technique.
Rendez-vous la semaine prochaine 😉
Mélanie
Super article ;)