[RUBY] Êtes-vous toujours épuisé par la mise en œuvre de la fonction de recherche? Gem'ransack 'qui peut être implémenté en un instant

Bonjour,

Cette fois, Gem qui peut implémenter la fonction de recherche à une vitesse explosive

Ransack est.


Non, c'est vraiment pratique. La fonction de recherche est de haut niveau, n'est-ce pas? Je pensais, Avec cette gemme, vous pouvez le faire en environ 30 minutes.

On a l'impression que Gem est à nouveau incroyable. (vocabulaire)


Faisons-le maintenant


Tout d'abord
gem 'ransack'

Dans le Gemfile.

% bundle install

N'oublie pas


Aller au routage

 resources :books do
    collection do
      get 'search'
    end
  end

Le routage est

         search_books GET      /books/search(.:format)                                                                  books#search

Je me sens comme cela.

Il y a un membre similaire à la collection

 member do
      get 'search'
 end

Vous permet d'inclure l'id dans le routage

         search_books GET      /books/:id/search(.:format)                                                                  books#search

Cette fois, je l'ai fait parce que je veux pouvoir rechercher la colonne appelée tag_name dans la base de données du livre.


Ensuite, nous ferons une vue

rails g controller books  search

Cela créera un contrôleur et recherchera View.


Contrôleur Contrôleur ♪

books_controller.rb


class BooksController < ApplicationController
  before_action :search_book, only: [:index, :search]


  def index
   @books =Book.all
  
   @book =Book.includes(:user)
   set_book_column 
  end

 
  def search
    @results = @p.result
    @book = @results.includes(:book)
  end


  private

  def search_book
    @p = Book.ransack(params[:q]) 
  end
  def set_book_column
    @book_name = Book.select("tag_name").distinct 
   end
end

C'est comme ça.

Book.select("tag_name").distinct

Mettez l'élément que vous souhaitez rechercher à la place de tag_name


Si vous mettez before_action Il se charge plus rapidement que toute autre chose.
Vient ensuite View!

books/index.html.reb


<%= search_form_for @p, url: search_books_path do |f| %>
    <%= f.label :tag_name_cont, 'Nom de la balise' %>
    <%= f.text_field  :tag_name_cont, placeholder: "Rechercher par nom de balise" %>
    <br>
    <%= f.submit 'Chercher' %>
<% end %>

La méthode search_form_for est une méthode spécifique à Lansac

Le contenu de tag_name_cont écrit sur la deuxième ligne est S'il correspond, il sera pris dans la recherche.

C'est celui-là.

Si vous le réglez sur eq, seul le même sera capturé.

Il y en a plusieurs autres, alors jetez un œil! Recommandation de Ransack


Créer un écran de résultats de recherche

books/search.html.erb


   <h1 class="search-forms">
Résultats de recherche
   </h1>
<head class ="search-book-list">
  <div class="book-chosen">
  <%#Rechercher la liste de produits applicables%>
   <% if @results.length !=0 %>    
    <% @results.each do |result| %>
     <br>
     <div class="sec1title">
    <div class="item-show">
          <h2 class='border01'>
            <%= result.genre.type %>
             <%= link_to "/books/#{result.id}" do %>
        <%end %>
          </h2>
        <%= image_tag result.image, id: 'slideshow' if result.image.attached? %>
        <div class="item-info" >
          <h2 id ='item-name'>
            <%= result.name %>
          </h2>
            <form class="item-content-show">
            <%= result.content %>
            </form>
        </div>
        <br />
       </div>
     </div>
    <% end %>
   <% else %>
    <br/>
Il n'y a pas de produit applicable
   <br/>
   <br/>
<div>
   <%=link_to  "Rentrer à la maison",root_path%>
</div>
   <% end %>
   <br>
  </div>
  
<%#Bouton d'accueil%>
   <%= render "shared/sidebar" %>

 </head>

dekita!:relaxed:

Avec le contrôleur

 def search
    @results = @p.result
    @book = @results.includes(:book)
  end

Puisqu'il est écrit comme ça, de @result Je prends la valeur.


C'est la fin de l'explication. Environnement Ruby sur rails

N'hésitez pas à commenter si vous faites des erreurs! !!

Recommended Posts

Êtes-vous toujours épuisé par la mise en œuvre de la fonction de recherche? Gem'ransack 'qui peut être implémenté en un instant
[Java] Implémenter une fonction qui utilise une classe implémentée dans le modèle Builder
J'ai essayé d'implémenter la fonction de téléchargement d'images multiples dans Rails afin que plusieurs images puissent être glissées pour le message
Êtes-vous toujours épuisé par la recherche d'exemples de vidéos? Un bouton pour envoyer des vidéos FANZA à Slack lorsque vous appuyez dessus.
Mémo qui passe à l'écran de connexion si vous n'êtes pas connecté avec l'appareil
[Question] Nullif peut-il être utilisé dans la fonction de comptage de JPQL?
Introduction à Rakefile qui peut être effectuée en 10 minutes environ
Juger si les chaînes de caractères à comparer sont les mêmes en Java
Créer une ArrayList qui vous permet de lancer et de récupérer les coordonnées d'un plan bidimensionnel
Un hachage actif qui peut être traité comme des données même s'il n'est pas dans la base de données
Une solution à une erreur qui vous met en colère parce que vous ne suivez pas le paramètre par défaut de MySQL ONLY_FULL_GROUP_BY en production et qu'il n'est pas unique