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 ;)