L'essentiel de Ruby on Rails

Travailler avec has_and_belongs_to_many/has_many :through

TESTEZ LINKEDIN LEARNING GRATUITEMENT ET SANS ENGAGEMENT

Tester maintenant Afficher tous les abonnements
Après avoir lié auteurs et sujets, comment lier plusieurs catégories de discussions à plusieurs sujets ? Pour cela, vous aurez besoin de l'association X et X.
04:18

Transcription

Je vais vous présenter dans cette vidéo l'association Has and belongs to many ainsi que l'association Has many through. Pour cela, je vais rajouter des catégories qui permettront de catégoriser les sujets de discussions. Je vais utiliser la fameuse commande Rails generate scaffold pour générer les catégories. Notez les options de cette commande qui vont permettre d'éviter de générer des fichiers que nous ne souhaitons pas avoir. Une fois exécuté, modifiez le fichier de migration pour rajouter cette ligne. Cette ligne aura pour effet de créer automatiquement la time de jointure entre les données Topics et Categories. Exécutez ensuite Rake db:migrate. Rendez-vous ensuite au sein de votre modèle Categories et ajoutez Has_and_belongs_to_many :topics. Mettez la réciproque au niveau de votre modèle Topics. Même si nous ne l'utiliserons pas forcément dans notre application, nous pouvons également dire que Topics Answers a plusieurs catégories à travers le sujet de discussion, donc le modèle Topics. Pour cela, nous utilisons Has_many :categories, option through :topic. Nous allons désormais permettre la sélection des catégories au niveau de notre formulaire des sujets de discussion. Écrivez simplement F.association :categories. C'est ici où Simple Form se révèle être plus efficace que Form with de Ruby on Rails. La syntaxe avec Form With aurait été sensiblement plus lourde. Il nous reste à permettre ici la modification des catégories associées. Le paramètre envoyée par la soumission du formulaire sera un tableau des ids des catégories sélectionnées au sein de notre formulaire. Ajoutez également un lien dans votre menu pour pouvoir gérer les catégories. Nous retrouvons dans notre site un champ de sélection multiple de données. Nous pouvons par exemple sélectionner la catégorie Games of Throne pour ce sujet de discussion. Terminons en ajoutant un filtre ici pour ne récupérer que les sujets de discussion d'une catégorie donnée. Commençons par rajouter le champ de filtre par catégorie dans le formulaire. J'en ai profité pour améliorer un petit peu le formatage de ce formulaire. Ce qui est nouveau ici, est la méthode options_from_collection_for_select Évidemment, vous ne pouviez pas la deviner, elle est issue directement de la documentation de select tag de Ruby on Rails. Cette méthode prend en paramètre la collection de données, la méthode appelée sur chaque élément pour avoir la valeur du tag option qui sera ici ID, et la méthode pour obtenir l'élément qui sera affiché dans le tag option. Ici Name. Cela aura pour effet de générer un ensemble de tags option avec comme valeur l'ID d'une catégorie, et comme affichage, le nom de la catégorie. Nous précisons également ici params category ID, pour préselectionner la catégorie, si jamais il y en avait une de sélectionnée pour un filtrage. La dernière option Prompt permet d'ajouter une option vide avec comme affichage Par catégorie. Évidemment il faut aussi modifier la méthode get_topics au sein de notre contrôleur. Ici, si nous avons le paramètre Category Id de renseigné, nous récupérons la catégorie, puis l'ensemble des sujets de discussion qui lui sont associés. Cette petite ligne ici, nous permettent de définir par défaut la variable topics comme valant le modèle topics si jamais cette variable n'a pas été définie auparavant. C'est-à-dire si le paramètre Category Id n'était pas présent. Il nous reste à modifier ici la méthode self.search afin que le filtrage par catégorie puisse être combiné au filtrage par mot-clé. L'inconvénient ici, est l'usage du mot « self » qui aura pour effet de renvoyer l'ensemble des sujets de discussion même si la méthode est appelée sur les sujets de discussion filtrés par catégorie. Nous allons donc plutôt utilisé un scope qui sera plus efficace ici. Il reste à supprimer la méthode self.search. Et voilà, le champ de recherche fonctionne. Vous avez vu dans cette vidéo, grâce à l'association Has_and_belongs_to_many comment relier des sujets de discussion des catégories et comment filtrer ces derniers grâce à un champ de sélection.

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 !