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
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
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.
N'hésitez pas à commenter si vous faites des erreurs! !!
Recommended Posts