[RUBY] Implémenter la fonction de recherche de publication dans l'application Rails (méthode where)

App: SNS où vous pouvez partager des photos et des informations sur les magasins de ramen avec vos amis Ruby: 2.6.5 Rails: 5.2.0

Configurer un formulaire de recherche dans la vue

Utilisez form_with pour transmettre le mot de recherche à l'action de recherche de posts_controller.

erb:app/views/layouts/_header.html.erb


・
・
・
<div class="post_search">
  <%= form_with url: search_posts_path, method: :get, local: true do |f| %>
    <%= f.text_field :search, class: 'form-control', placeholder: "Recherche par mot clé"  %>
    <%= f.button :type => "submit" do %>
      <i class="fas fa-search"></i>
    <% end %>
  <% end %>
</div>
・
・
・

スクリーンショット 2020-09-23 18.54.03.jpg

routage

En créant routes.rb comme suit, L'envoi d'une requête get à l'URL / posts / search (search_posts_path) vous dirigera vers l'action de recherche de posts_controller.

config/routes.rb


~
~
resources :posts, only: [:new, :create, :edit, :show, :update, :destroy] do
  get :search, on: :collection
end
~
~

posts_controller Définissez les articles qui correspondent au mot recherché avec @posts.

app/controllers/posts_controller.rb


~
~
def search
  @section_title = "「#{params[:search]}Résultats de recherche"
  @posts = if params[:search].present?
             Post.where(['shop_name LIKE ? OR nearest LIKE ?',
                        "%#{params[:search]}%", "%#{params[:search]}%"])
                 .paginate(page: params[:page], per_page: 12).recent
           else
             Post.none
           end
end
~
~

Reçoit le mot de recherche transmis depuis form_with dans les paramètres [: search]. La méthode where renvoie tous les enregistrements qui correspondent à la condition à partir de la table. (S'il n'y a pas de mot de recherche, je l'ai défini sur Post.none et je n'ai pas reçu le message.)

où méthode

Dans la méthode where, comme indiqué ci-dessous

Nom du modèle.where('Nom de colonne= ?', "valeur")

Vous pouvez mettre? Dans le premier argument (appelé espace réservé) et la valeur de la condition dans le second argument. En écrivant de cette manière, il semble qu'il soit possible d'empêcher une attaque appelée injection SQL qui manipule illégalement les données de la base de données.

Le deuxième argument de où est le suivant

"%#{params[:search]}%"

Je mets% avant et après le mot recherché. En faisant cela, même si "plusieurs chaînes de caractères comprenant des caractères vides" sont incluses avant et après le mot recherché Vous pouvez renvoyer un enregistrement avec cette chaîne.

Exemple

%Jiro%
→ "Jiro" "Ramen Jiro" "Tsukemen Jiro" "Ramen Jiro Hachioji Store" "Jiro Kabukicho Store"
Tous sont applicables.

%Jiro
→ "Jiro", "Ramen Jiro" et "Tsukemen Jiro" sont applicables,
Le "magasin Ramen Jiro Hachioji" et le "magasin Jiro Kabukicho" ne s'appliquent pas.

À partir des deux colonnes shop_name et plus proche en écrivant comme ci-dessous Recherche la chaîne qui correspond au mot recherché et renvoie l'enregistrement.

Post.where(['shop_name LIKE ? OR nearest LIKE ?',
            "%#{params[:search]}%", "%#{params[:search]}%"])

Après cela, veuillez afficher @posts dans app / views / posts / search.html.erb.

Comme ça

スクリーンショット 2020-09-23 21.33.34.jpg

スクリーンショット 2020-09-23 21.34.05.jpg

référence

[Rails] Comment rechercher dans plusieurs colonnes avec un seul formulaire de recherche [[Rails] Utilisez la méthode where pour obtenir les données souhaitées! ](Https://pikawaka.com/rails/where#where%E3%83%A1%E3%82%BD%E3%83%83%E3%83%89%E3%81%AE%E5%9F% BA% E6% 9C% AC% E7% 9A% 84% E3% 81% AA% E4% BD% BF% E3% 81% 84% E6% 96% B9)

Recommended Posts

Implémenter la fonction de recherche de publication dans l'application Rails (méthode where)
Implémenter la fonction d'application dans Rails
[Rails] Implémenter la fonction de recherche d'utilisateurs
Ajoutez une fonction de recherche dans Rails.
Implémenter une fonction de connexion simple dans Rails
Implémenter la fonction de téléchargement CSV dans Rails
Comment implémenter la fonctionnalité de recherche dans Rails
Mettre en œuvre la fonction de classement par étoiles en utilisant Raty dans Rails 6
Markdown implémenté dans Rails
[Rails] Implémentez la fonction d'enregistrement / suppression de carte de crédit dans PAY.JP
[Ruby on Rails] Fonction de prévisualisation de l'image dans le fichier
[Ruby on Rails] Fonction de recherche (modèle, formule de sélection de méthode)
Implémentation de la fonction de recherche floue Rails
Fonction de recherche à l'aide de [rails] ransack
Implémenter l'authentification LTI dans Rails
[Rails] Implémenter la fonction de publication d'images
Implémentez la fonction de connexion dans Rails simplement avec le nom et le mot de passe (1)
Implémentez la fonction de connexion dans Rails simplement avec juste un nom et un mot de passe (2)
Implémentez la fonction de connexion simplement avec le nom et le mot de passe dans Rails (3)
Implémenter la fonction d'enregistrement des utilisateurs et la fonction d'enregistrement de l'entreprise séparément dans Rails concevoir
[Rails] Implémentation d'une fonction de demande / d'approbation d'adhésion à la communauté à l'aide d'associations plusieurs-à-plusieurs
[Rails] Un moyen simple d'implémenter une fonction d'auto-introduction dans votre profil
Implémentez une fonction de recherche affinée pour plusieurs modèles sans gemme Rails5.
J'ai essayé d'implémenter le traitement Ajax de la fonction similaire dans Rails
Créons une application TODO en Java 6 Implémentation de la fonction de recherche
Implémenter la fonction PHP implode en Java
Implémenter un formulaire de contact dans Rails
Implémenter l'application Spring Boot dans Gradle
Les rails 6 (avec Webpacker en standard) implémentent la fonction de classement par étoiles
[Ruby on Rails] Fonction de recherche (non sélectionnée)
[Rails] Restrictions de fonction dans l'appareil (connexion / déconnexion)
Comment implémenter la fonctionnalité de classement dans Rails
[Rails] Résumé des méthodes de conversion / vérification / recherche
Implémenter des transitions de boutons à l'aide de link_to dans Rails
[Rails] Comment utiliser la méthode d'assistance utilisée dans l'application principale avec Administrer
À propos du cas où "Docker" freeter a tenté de mettre Docker dans l'application Rails existante
méthode des rails
Nuxt.js × Créer une application en mode API Rails
[Rails] Implémentation de la fonction de recherche en utilisant le ransack de gem
[Order method] Définit l'ordre des données dans Rails
Où je suis resté coincé dans le "tutoriel sur les rails" d'aujourd'hui (08/10/20)
Implémenter un bouton de partage dans Rails 6 sans utiliser Gem
Fonction de publication implémentée par communication asynchrone dans Rails
Implémentez la fonction de recherche de correspondance partielle sans utiliser Ransuck
Implémentez l'algorithme dans Ruby: Day 3-Dichotomy-
Où je suis resté coincé dans le "tutoriel des rails" d'aujourd'hui (05/10/2020)