L'essentiel de Ruby on Rails

Solution : Créer une donnée de type vote avec Ruby

TESTEZ LINKEDIN LEARNING GRATUITEMENT ET SANS ENGAGEMENT

Tester maintenant Afficher tous les abonnements
Grâce à acts_as_votable, il est assez simple d'ajouter un système de votes. Découvrez comment utiliser cette méthode pour créer une nouvelle donnée de type vote.
06:34

Transcription

Nous allons résoudre l'exercice qui consistait à ajouter un système de vote à notre application. Pour cela, nous allons utiliser la gemme « acts as votable ». Comme d'habitude au sein de Ruby, vous avez l'ensemble des instructions pour ajouter la gemme à votre projet. Cette gemme contient un ensemble de méthodes qui vont permettre de voter positivement ou négativement sur chacun de nos sujets de discussion et réponses. Vous pouvez explorer le « Read me » qui possède de nombreux exemples avec l'usage de nombreuses méthodes permettant de faciliter cela. Enfin, vers la fin du « Read me », vous trouverez quelques informations pour améliorer les performances de ce système. Je vous conseille de vous y pencher si jamais vous souhaitez effectivement utiliser cette gemme dans vos futurs projets. Attention, lors de l'exécution de la commande « rake db migrate », vous risquez d'avoir une erreur. Il manque en effet cette petite information au niveau du fichier de « migration ». Cette spécification de la version de rails est nécessaire car d'une version à une autre en Ruby on rails certains paramètres par défaut évoluent. Par exemple, en rails 4.2, des colonnes de type « string » feront 4 bits. Tandis que depuis la version 5 de rails, ces colonnes feront 8 bits par défaut. Une fois la gemme convenablement installée, nous pouvons ajouter la méthode « acts as votable » au sein de notre module « topicable ». De cette manière, nos sujets de discussion et nos réponses pourront recevoir des votes. Nous pouvons également ajouter la méthode « acts as voter » au niveau de notre modèle « user ». Nous pouvons d'ores et déjà utiliser les méthodes au sein de nos sujets de discussion. Par exemple, grâce à cette méthode, nous affichons le nombre de votes qui ont été assignés à notre sujet. Évidemment, pour le moment, nous en avons zéro. Rajoutons ici deux méthodes pour permettre à un utilisateur d'upvoter ou de downvoter notre sujet de discussion. Pour le moment, comme nous n'avons pas de système d'authentification, nous déciderons d'utiliser le premier utilisateur existant dans notre base de données. Continuons en ajoutant des liens pour upvoter et downvoter notre sujet de discussion. Je vais en profiter pour ajouter un petit peu de structure à ce-dernier, pour pouvoir afficher les votes à gauche du sujet. J'ai utilisé ici le système « [inaud] foundation » pour pouvoir mettre en place cette solution. Rajoutons également un peu de style au sein de notre fichier « topics.scss » afin de centrer les votes. Le résultat obtenu n'est, à priori, pas trop mal. Reste à faire fonctionner ces liens. Nous allons ajouter deux routes : downvote et upvote. Nous faisons cela au sein de la ressource « topics » de notre fichier « root ». Rajoutons ici « member » « do end ». Puis « post upvote» et « post downvote». Vous pouvez utiliser « rails route » pour voir les routes générées par l'ajout de ces deux lignes. La différence avec la route « post answer » est que le paramètre ID sera stocké ici dans « :id » tandis que dans « post answer », il est retrouvé dans « topic_id » Créons maintenant les actions des contrôleurs correspondantes. Avant de rajouter les actions downvote et upvote, j'aimerais vous apprendre les filters au sein des contrôleurs. Il en existe trois. « Before action », qui exécutera du code avant chacune des actions du contrôleur, « after action », moins utilisée, mais qui exécutera du code après une action du contrôleur, et « around action », qui exécutera lui un même tronçon de code avant et après chacune des actions. Comme nous avons besoin du sujet de discussion au sein des actions downvote et upvote, nous allons utiliser « before action » pour pouvoir définir la variable « @ topic » avant toutes ces actions. Nous en profiterons du coup pour supprimer les occurrences d'« @ topic » comme dans l'action « show » ou « edit ». « before action » prend en premier paramètre la méthode à exécuter. Nous allons ici l'appeler « set topic ». Ensuite, nous pouvons lui donner les actions pour lesquelles on doit exécuter cette méthode avec les mots-clés soit « only », soit « except ». Utilisons ici « only ». « except » exécutera cette méthode sauf pour les actions précisées ici. « only » exécutera cette méthode pour les actions précisées entre crochets. Mettons donc « upvote downvote, show, edit update » et « destroy ». Créons maintenant la méthode « set topic » Elle va tout simplement définir la variable « @ topic » en récupérant le sujet de discussion depuis la base de données. Nous pouvons du coup supprimer toutes les occurrences de ce code au sein des actions. Faisons de même pour la récupération de l'utilisateur. Nous testons dans la méthode « set user » si la base de données possède au moins un utilisateur. Si c'est le cas, nous le récupérons grâce à la méthode « .first », qui récupérera le premier utilisateur de notre base de données, trié par ID. Dans le cas contraire, nous redirigeons vers la page de profil pour créer un utilisateur. Créons maintenant les deux actions upvote et downvote. Toutes les méthodes que j'ai utilisé ici, au sein des actions upvote et downvote, sont issues de la documentation de la gemme. Dans cette première ligne, nous vérifions si l'utilisateur a déjà voté pour le sujet de discussion. Si c'est le cas, nous retirons ce vote. Si ce n'est pas le cas, nous ajoutons un vote « like ». Pour le downvote, cela fonctionne de la même manière. Nous vérifions si l'utilisateur a déjà downvoté pour le sujet de discussion. Si c'est le cas, nous enlevons son vote, et sinon, nous votons négativement. Avant de les tester, il vous reste à ajouter les URL au niveau des liens dans votre page de visualisation « show ». J'ai donc ajouté ici la méthode « upvote topic path » en tenant en paramètre le sujet de discussion. Ici « downvote topic path » avec le même paramètre. Notez également l'usage de l'option « method » ici pour indiquer qu'il s'agit d'une requête « http post ». Enfin, il est plus utile d'obtenir la différence entre le nombre d'upvotes et le nombre de downvotes plutôt que le nombre de votes total. Vous avez normalement maintenant tous les éléments pour faire fonctionner le système de vote. Cette solution vous a présenté comment rajouter un système de vote assez rapidement et simplement en Ruby on rails. Il existe de nombreuses manières différentes d'ajouter ce système de vote. D'ailleurs, si vous cherchez des gemmes, vous risquez d'en trouver un grand nombre. Celle que je vous ai fait utiliser dans la solution a l'avantage d'être compatible avec rails 5.1 Et j'espère qu'elle sera convenablement maintenue pour pouvoir être encore utilisée dans le futur.

L'essentiel de Ruby on Rails

Concevez des applications web évolutives et intemporelles avec Ruby on Rails. Installez l’environnement, réalisez un projet de stack overflow, enrichissez-le, etc.

6h08 (85 vidéos)
Aucun commentaire n´est disponible actuellement

Votre formation est disponible en ligne avec option de téléchargement. Bonne nouvelle : vous ne devez pas choisir entre les deux. Dès que vous achetez une formation, vous disposez des deux options de consultation !

Le téléchargement vous permet de consulter la formation hors ligne et offre une interface plus conviviale. Si vous travaillez sur différents ordinateurs ou que vous ne voulez pas regarder la formation en une seule fois, connectez-vous sur cette page pour consulter en ligne les vidéos de la formation. Nous vous souhaitons un excellent apprentissage avec cette formation vidéo.

N'hésitez pas à nous contacter si vous avez des questions !