[RUBY] Sind Sie noch erschöpft von der Implementierung der Suchfunktion? Gem'ransack ', der sofort implementiert werden kann

Hallo,

Diesmal Gem, der die Suchfunktion mit explosiver Geschwindigkeit implementieren kann

Ransack ist.


Nein, das ist wirklich praktisch. Die Suchfunktion ist zufällig hoch, nicht wahr? Ich dachte, Mit diesem Edelstein können Sie es in etwa 30 Minuten tun.

Es fühlt sich an, als wäre Gem wieder erstaunlich. (Wortschatz)


Lass es uns jetzt machen


Als allererstes
gem 'ransack'

In der Gemfile.

% bundle install

Vergiss nicht


Gehen Sie routen

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

Routing ist

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

Ich fühle mich so.

Es gibt ein Mitglied, das der Sammlung ähnlich ist

 member do
      get 'search'
 end

Ermöglicht das Einfügen der ID in das Routing

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

Diesmal habe ich dies getan, weil ich die Spalte tag_name in der Buchdatenbank durchsuchen möchte.


Als nächstes werden wir eine Ansicht machen

rails g controller books  search

Dadurch wird ein Controller erstellt und die Ansicht durchsucht.


Controller Controller ♪

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

Es ist so.

Book.select("tag_name").distinct

Setzen Sie das zu suchende Element anstelle von tag_name ein


Wenn Sie before_action setzen Es wird schneller geladen als alles andere.
Weiter ist Ansicht!

books/index.html.reb


<%= search_form_for @p, url: search_books_path do |f| %>
    <%= f.label :tag_name_cont, 'Verlinke den Namen' %>
    <%= f.text_field  :tag_name_cont, placeholder: "Suche nach Tag-Namen" %>
    <br>
    <%= f.submit 'Suche' %>
<% end %>

Die search_form_for-Methode ist eine Lansac-spezifische Methode

Der Inhalt von tag_name_cont in der zweiten Zeile lautet Wenn es übereinstimmt, wird es bei der Suche abgefangen.

Das ist der eine.

Wenn Sie es auf Gl. Setzen, wird nur genau das gleiche gefangen.

Es gibt mehrere andere, also schauen Sie mal rein! Ransack-Empfehlung


Erstellen Sie einen Suchergebnisbildschirm

books/search.html.erb


   <h1 class="search-forms">
Suchergebnisse
   </h1>
<head class ="search-book-list">
  <div class="book-chosen">
  <%#Suche Anwendbare Produktliste%>
   <% 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/>
Es gibt kein anwendbares Produkt
   <br/>
   <br/>
<div>
   <%=link_to  "nachhause kommen",root_path%>
</div>
   <% end %>
   <br>
  </div>
  
<%#Home "Button%>
   <%= render "shared/sidebar" %>

 </head>

dekita!:relaxed:

Mit dem Controller

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

Da es so geschrieben ist, von @result Ich nehme den Wert heraus.


Dies ist das Ende der Erklärung. Umgebung Rubin auf Schienen

Fühlen Sie sich frei zu kommentieren, wenn Sie Fehler machen! !!

Recommended Posts

Sind Sie noch erschöpft von der Implementierung der Suchfunktion? Gem'ransack ', der sofort implementiert werden kann
[Java] Implementieren Sie eine Funktion, die eine im Builder-Muster implementierte Klasse verwendet
Ich habe versucht, die Funktion zum Hochladen mehrerer Bilder in Rails zu implementieren, damit mehrere Bilder für den Beitrag verschoben werden können
Sind Sie immer noch erschöpft von der Beispielvideosuche? Eine Schaltfläche zum Senden von FANZA-Videos an Slack, wenn diese gedrückt wird.
Notiz, die zum Anmeldebildschirm übergeht, wenn Sie nicht mit devise angemeldet sind
[Frage] Kann nullif in der Zählfunktion in JPQL verwendet werden?
Einführung in Rakefile, die in ca. 10 Minuten durchgeführt werden kann
Beurteilen Sie, ob die zu vergleichenden Zeichenfolgen in Java identisch sind
Erstellen einer ArrayList, mit der Sie die Koordinaten einer zweidimensionalen Ebene eingeben und abrufen können
Ein aktiver Hash, der als Daten behandelt werden kann, auch wenn er nicht in der Datenbank enthalten ist
Eine Lösung für einen Fehler, der Sie verärgert, dass Sie in einer Produktionsumgebung nicht der MySQL-Standardeinstellung ONLY_FULL_GROUP_BY folgen und diese nicht eindeutig ist.