L'essentiel de Ruby on Rails

Créer un champ de recherche

TESTEZ LINKEDIN LEARNING GRATUITEMENT ET SANS ENGAGEMENT

Tester maintenant Afficher tous les abonnements
Dans cette séquence, vous allez apprendre à créer un champ de recherche par mots-clés sur des sujets de discussion.
07:04

Transcription

Nous avons une liste de données et nous aimerions maintenant effectuer des recherches dessus. Nous allons voir ensemble comment faire cela. Allez dans votre code, dans la page d’index des sujets de discussion. Nous allons rajouter un formulaire contenant simplement un champ qui nous servira pour enseigner les mots-clés sur lesquels nous souhaitons effectuer la recherche. Vous avez peut-être déjà vu la méthode form_with qui permet de générer un formulaire lorsque nous avons accès à une instance d’un modèle. Lorsque ce n’est pas le cas, comme ici, nous pouvons utiliser plutôt la méthode form_tag. Cette méthode prend en premier paramètre l’URL vers laquelle nous allons effectuer le POST du formulaire. Nous pouvons ici utiliser la méthode topics_path. Vous noterez ici que contrairement avec la méthode form_with, nous n’avons pas accès à ce que nous appelons le form builder. Cela n’est pas très grave car Ruby on Rails embarque des méthodes permettant de générer de toute pièce des champs de formulaire. Par exemple, la méthode text_field_tag qui permet de générer un champ de texte. Nous pouvons également utiliser la méthode submit_tag qui permet de générer un bouton. Il faut faire attention que, par défaut, le formulaire enverra la requête vers notre application Rails avec le gem http post. Si nous regardons les routes correspondant aux topics, nous verrons que POST /topics Or, ce n’est pas ce que nous voulons. Lorsque nous soumettons le formulaire, nous voulons accéder à l’action index pour récupérer notre index de sujets de discussion filtrés. Notez ici l’usage de l’option -g topics qui permet de filtrer les routes que nous affichons dans le terminal via le mot-clé topics, c’est-à-dire que toutes les routes ne contenant pas ce mot-clé ne s’afficheront pas. Cela est utile si jamais vous voulez voir justement les URLS accessibles pour certaines données. Revenons à notre formulaire, pour lui dire que nous souhaitons effectuer une requête GET plutôt que POST. Il suffit de le lui préciser comme ceci. Voyons déjà si nous avons le formulaire qui s’affiche. Il semble que cela soit le cas même si pour le moment il n’est pas très beau. Renseignons ici une recherche. Par exemple : edwyn. Évidemment, pour le moment, cela ne change absolument rien à notre index de données. Mais remarquez comment l’URL a changé ci-dessus. Nous y retrouvons le paramètre search ainsi que le paramètre commit qui a été généré par le bouton. Nous aimerions faire deux choses : avoir Edwyn qui soit de nouveau présent dans le champ puisque nous avons effectué cette recherche, et retirer le paramètre commit. Revenons dans le formulaire pour faire cela. Pour récupérer le paramètre recherche, il suffit de le donner ici en paramètre de la méthode text_field_tag. Pour retirer le paramètre commit, nous précisons ici l’option name: nil. Retournons à notre formulaire et essayons. Bien, nous avons de nouveau le mot-clé Edwyn qui reste dans notre champ et nous n’avons plus ici commit qui apparait. Terminons en effectuant le filtrage sur nos données. Nous pourrions faire cela à l’intérieur de notre action index, dans notre contrôleur. Cependant, il est plus usuel de mettre ce genre de filtrage à l’intérieur du modèle. Faisons donc plutôt cela. Entrez dans votre modèle topic. Ajoutez-y la méthode de classe search. search fait en fait référence à l’objet actuel, à savoir ici, la classe elle-même. Si nous étions dans une méthode d’instance, self ferait référence à l’instance elle-même. C’est un peu le dist du Javascript, si vous connaissez. Mettons en paramètre les mots-clés de la recherche. Pour le moment, nous n’allons faire la recherche que sur le titre de nos sujets de discussion. Testons d’abord si notre variable keywords est correctement renseigné. La méthode blank qui est utilisée ici permet d’éviter d’avoir à écrire ceci. Autrement dit, la méthode blank permettra de tester si la variable keyword est vide ou si carrément elle n’a pas de valeur renseignée. S’il est vide, nous renvoyons l’objet lui-même. Sinon, nous effectuons la recherche. Pour cela, nous utilisons la méthode where. Cette méthode peut prendre un paramètre, des requêtes SQL. Ce n’est pas très grave si vous n’êtes pas familier des requêtes SQL. Au fur et à mesure de leur usage, vous finirez bien par les comprendre et les maitriser. Nous voulons effectuer ici la recherche sur le champ de titre. Nous écrivons donc title puis le mot clé LIKE et un point d’interrogation. Continuons, mettons une virgule, des guillemets, le signe pourcentage. Pourcentage, ne vous inquiétez pas, je vais vous expliquer. Et la variable keywords. Ici, nous disons que nous recherchons tous les topics, le mot-clé contenu dans la variable keywords. Le point d’interrogation que vous voyez ici sera automatiquement remplacé par le second paramètre. Autrement dit, si vous en mettez ici un second, de point d’interrogation, il faudra que vous renseignez un autre paramètre. Les signes pourcentage permettent de dire que nous recherchons le mot-clé contenu dans keywords mais pas forcément exactement celui-ci, à savoir, si nous retirons le signe pourcentage ici, la recherche s’effectuera bien. Seulement il faudra que ce qui est contenu dans keywords corresponde exactement à ce qu’il y a dans les champs title de nos données topics, pour que ces dernières ressortent. Si nous ne mettions qu’un pourcentage ici, il faudrait alors que le titre se termine par ce qui est contenu dans la variable keywords. Si nous le mettons à la fin, il faudrait alors que le titre commence par ce qui est contenu dans la variable keywords. En le mettant au début et à la fin, nous disons que ce qui est contenu dans la variable keywords peut se trouver n’importe où dans le titre. Utilisons maintenant cette méthode au sein de notre contrôleur. Nous pouvons l’appeler directement sur notre class topic, et y fournir le paramètre. Testons, rafraichissons simplement la page et nous voyons que le filtrage a bien lieu. Nous pouvons également tester en ne mettant rien. Nous pouvons aussi personnaliser le bouton en lui rajoutant une classe HTML. Pour cela, rendez-vous dans votre fichier index, modifiez le formulaire et rajoutez à submit_tag l’option class: button. Revenons sur le site. On rafraichit. Et nous avons maintenant le bouton optimisé grâce à foundation Nous avons vu dans cette vidéo comment mettre en place un simple champ de recherche sur une page d’index de données.

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 !