[RUBY] Mise en place de la fonction de recherche Mémo d'apprentissage (création de portfolio)

introduction

Lors de la création du portfolio, j'ai implémenté une fonction de recherche, donc je posterai un article en mémo

Créer des champs de saisie et des boutons de recherche

app/views/tweet/index

= form_with(url: search_tweets_path, local: true, method: :get, class: "search-form") do |form|
  = form.text_field :keyword, placeholder: "Rechercher des articles", class: "search-input"
  = form.submit "Chercher", class: "search-btn"

Définir le routage pour l'action de recherche

routes

 resources :tweets do 
    resources :comments, only: :create
      collection do #ajouter à
        get 'search' #ajouter à
      end  #ajouter à
~ abrégé ~
  end

Il sera affiché comme ci-dessous. image.png

point

** Dans les rails, il existe des collections et des membres comme moyens de configurer le routage autres que 7 actions **

- -
collection Pour le routage:l'identifiant n'est pas joint
member Pour le routage:l'identifiant est joint

** Cette fois, je vais utiliser. ** ** ** Une fois défini, effectuez des itinéraires ferroviaires et voyez par vous-même. ** **

Définir la méthode de recherche dans le modèle Tweet

Définissez une méthode de recherche pour la recherche à partir de la table dans le modèle.

Une logique telle que la recherche du point de vue de MVC doit être définie collectivement dans le modèle en tant que méthode.

** Définissez la méthode de recherche dans le modèle Tweet. Utilisez la méthode where et la clause LIKE pour obtenir les publications contenant les mots-clés recherchés. ** **

Modifier le modèle

Ajoutez ce qui suit à app / models / tweet.rb.

def self.search(search)
    if search
      Tweet.where('text LIKE(?)', "%#{search}%")
    else
      Tweet.all
    end
  end

point

à propos de la méthode where

Une des méthodes ActiveRecord. En spécifiant une condition dans la partie argument comme model .where (condition), vous pouvez obtenir une instance de l'enregistrement qui correspond à la condition de la table sous la forme d'un tableau.

Assurez-vous d'inclure la "colonne à rechercher" dans la condition d'argument et de décrire l'expression conditionnelle.

modèle.where('Expression conditionnelle comprenant la colonne à rechercher')

À propos de la clause LIKE

La clause LIKE vous permet de rechercher des chaînes ambiguës et est utilisée avec la méthode where.

Par exemple, lorsque vous souhaitez rechercher des données contenant la chaîne de caractères «a» dans le premier caractère, des données contenant «b» dans le dernier caractère ou des données contenant «c» au milieu de la chaîne de caractères, un caractère ambigu Recherche à l'aide de colonnes.

Exemple d'exécution Exemple d'exécution
where('title LIKE(?)', "a%") Titres commençant par un
where('title LIKE(?)', "%b") Titres se terminant par b
where('title LIKE(?)', "%c%") Titres contenant c
where('title LIKE(?)', "d_") Titre à deux lettres commençant par d
where('title LIKE(?)', "_e") Titre à deux lettres se terminant par e

Définir une action de recherche dans le contrôleur

Appelez la méthode de recherche écrite dans le modèle. Les résultats de la recherche sont transmis en écrivant les paramètres [: mot-clé] dans l'argument de la méthode seach.

De plus, la recherche est ajoutée à l'option except de before_action pour éviter d'être redirigé vers la première page lorsque vous n'êtes pas connecté.

app/controllers/tweets_controller.rb


  before_action :move_to_index, except: [:index, :show, :search]

 def search
    @tweets = Tweet.search(params[:keyword])
  end

~ abrégé ~

 private
  def move_to_index
    redirect_to action: :index unless user_signed_in?
  end

Enfin créer du HTML

La description est ci-dessous

app/views/tweets/search.html.erb


= form_with(url: search_tweets_path, local: true, method: :get, class: "search-form") do |form|
  = form.text_field :keyword, placeholder: "Rechercher des articles", class: "search-input"
  = form.submit "Chercher", class: "search-btn"
.contents.row
  - @tweets.each do |tweet|
    = render partial: "tweet", locals: { title: tweet }

La description du modèle de partie tweet est la suivante dans mon cas. C'est encore incomplet, mais cela a bien fonctionné ici pour le moment. app/views/tweets/_tweet.html.erb

.users_tweets
  - @tweets.each do |tweet|
    .users_tweets__lists
      .users_tweets__lists_list
        .users_tweets__lists_list__tweet_image
          = link_to tweet_path(tweet) do
            = attachment_image_tag tweet, :image
          = tweet.title
            
        .users_tweets__lists_list__user_image    
          = link_to user_path(tweet.user.id) do
            = attachment_image_tag tweet.user, :profile_image, fallback: "no-image.png "  
          = link_to tweet.user.username,user_path(tweet.user.id)  
          
        .users_tweets__lists_list__user_name  
          = tweet.updated_at.strftime("%Y-%m-%d %H:%M")
Date de mise à jour
          - if current_user.already_liked?(tweet)
            = link_to tweet_likes_path(tweet), method: :delete do
              %i.fas.fa-heart
          - else
            = link_to tweet_likes_path(tweet), method: :post do
              %i.far.fa-heart
          = tweet.likes.count

Je pense que vous pouvez l'implémenter maintenant!

Si vous obtenez une erreur, veuillez commenter.

Merci beaucoup!

Recommended Posts

Mise en place de la fonction de recherche Mémo d'apprentissage (création de portfolio)
Implémentation de la fonction de recherche
Implémentation de la fonction de recherche séquentielle
[Rails] Implémentation de la fonction de recherche en utilisant le ransack de gem
Mise en œuvre de la fonction de pagénation
Fonction de recherche [implémentation copier-coller]
Implémentation de la fonction de recherche floue Rails
Implémentation d'une fonction similaire (Ajax)
Implémentation de la fonction de prévisualisation d'image
[Rails] Implémentation de la fonction de catégorie
Mise en œuvre de la fonction déroulante de catégorie
[Rails] Implémentation de la fonction tutoriel
[Rails] Implémentation d'une fonction similaire
[Rails] Implémentation de la fonction de catégorie multicouche à l'aide de l'ascendance "Formulaire de création"
[Rails] Implémentation asynchrone de la fonction similaire
[Rails] Implémentation de la fonction de prévisualisation d'image
[Rails] À propos de la mise en œuvre de la fonction similaire
[Rails] Commentaire mémo de procédure d'implémentation
Implémentation d'une fonction similaire en Java
Créons une application TODO en Java 6 Implémentation de la fonction de recherche
Implémentation de la fonction d'authentification des utilisateurs à l'aide de devise (2)
Implémentation de la fonction d'authentification des utilisateurs à l'aide de devise (1)
Rails [Pour les débutants] Implémentation de la fonction de commentaire
Implémentation de la fonction d'authentification des utilisateurs à l'aide de devise (3)
[Ruby on rails] Implémentation d'une fonction similaire
Implémentation de la fonction de connexion Ruby on Rails (Session)
Résumé de l'apprentissage d'aujourd'hui: avec la mise en œuvre de la fonction de gestion des utilisateurs
[Rails] Implémentation de la fonction d'agrandissement d'image à l'aide de lightbox2
Mémo d'implémentation SKStoreReviewController dans l'interface utilisateur Swift d'iOS14
[JQuery] Procédure d'implémentation de la fonction de saisie semi-automatique [Java / Spring]
Implémentation de la fonction de suppression (si vous avez une clé étrangère)
Implémentation de la fonction DM
[Rails] Implémentation de la fonction glisser-déposer (avec effet)
Implémentation de la fonction de connexion Ruby on Rails (édition de devise)
[Rails] Implémentation de la fonction de catégorie multicouche en utilisant l'ascendance "Préparation"
[Rails] Implémentation de la fonction de catégorie multicouche à l'aide de l'ascendance "seed edition"