[RUBY] Implementieren Sie die Nachsuchfunktion in der Rails-Anwendung (where-Methode).

App: SNS, wo Sie Fotos und Informationen von Ramen-Shops mit Ihren Freunden teilen können Ruby: 2.6.5 Rails: 5.2.0

Richten Sie ein Suchformular in der Ansicht ein

Verwenden Sie form_with, um das Suchwort an die Suchaktion des posts_controllers zu übergeben.

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: "Schlagwortsuche"  %>
    <%= f.button :type => "submit" do %>
      <i class="fas fa-search"></i>
    <% end %>
  <% end %>
</div>
・
・
・

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

Routing

Indem Sie route.rb wie folgt erstellen: Wenn Sie eine Get-Anfrage an die URL / posts / search (search_posts_path) senden, werden Sie zur Suchaktion von posts_controller weitergeleitet.

config/routes.rb


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

posts_controller Definieren Sie Beiträge, die dem Suchwort mit @posts entsprechen.

app/controllers/posts_controller.rb


~
~
def search
  @section_title = "「#{params[:search]}Suchergebnisse"
  @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
~
~

Empfängt das von form_with in params [: search] übergebene Suchwort. Die where-Methode gibt alle Datensätze, die der Bedingung entsprechen, aus der Tabelle zurück. (Wenn es kein Suchwort gibt, habe ich es auf Post.none gesetzt und den Beitrag nicht erhalten.)

wo Methode

In der where-Methode, wie unten gezeigt

Modellname.where('Spaltenname= ?', "Wert")

Sie können? In das erste Argument (als Platzhalter bezeichnet) und den Wert der Bedingung in das zweite Argument setzen. Wenn Sie auf diese Weise schreiben, scheint es möglich zu sein, einen Angriff namens SQL Injection zu verhindern, der Daten in der Datenbank illegal manipuliert.

Das zweite Argument von wo ist wie folgt

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

Ich setze% vor und nach dem Suchwort. Auf diese Weise werden auch vor und nach dem Suchwort "mehrere Zeichenfolgen einschließlich Leerzeichen" eingefügt Sie können einen Datensatz mit dieser Zeichenfolge zurückgeben.

Beispiel

%Jiro%
→ "Jiro" "Ramen Jiro" "Tsukemen Jiro" "Ramen Jiro Hachioji Store" "Jiro Kabukicho Store"
Alle sind anwendbar.

%Jiro
→ "Jiro", "Ramen Jiro" und "Tsukemen Jiro" sind anwendbar,
"Ramen Jiro Hachioji Store" und "Jiro Kabukicho Store" gelten nicht.

Aus den beiden Spalten shop_name und next durch Schreiben wie folgt Sucht nach der Zeichenfolge, die mit dem Suchwort übereinstimmt, und gibt den Datensatz zurück.

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

Danach zeigen Sie bitte @posts in app / views / posts / search.html.erb an.

So was

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

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

Referenz

[Rails] Durchsuchen mehrerer Spalten mit einem Suchformular [[Rails] Verwenden Sie die where-Methode, um die gewünschten Daten abzurufen! ](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

Implementieren Sie die Nachsuchfunktion in der Rails-Anwendung (where-Methode).
Implementieren Sie die Anwendungsfunktion in Rails
[Schienen] Implementieren Sie die Benutzersuchfunktion
Fügen Sie eine Suchfunktion in Rails hinzu.
Implementieren Sie eine einfache Anmeldefunktion in Rails
Implementieren Sie die CSV-Download-Funktion in Rails
So implementieren Sie Suchfunktionen in Rails
Implementieren Sie die Sternebewertungsfunktion mit Raty in Rails 6
Markdown in Rails implementiert
[Rails] Implementieren Sie die Registrierungs- / Löschfunktion für Kreditkarten in PAY.JP
[Ruby on Rails] Post-Bildvorschau-Funktion in Refile
[Ruby on Rails] Suchfunktion (Modell, Methodenauswahlformel)
Implementierung der Fuzzy-Suchfunktion für Schienen
Suchfunktion mit [Rails] Ransack
Implementieren Sie die LTI-Authentifizierung in Rails
[Rails] Implementieren Sie die Image-Posting-Funktion
Implementieren Sie die Anmeldefunktion in Rails einfach mit Name und Passwort (1)
Implementieren Sie die Anmeldefunktion in Rails einfach mit nur einem Namen und einem Passwort (2).
Implementieren Sie die Anmeldefunktion in Rails einfach mit Name und Passwort (3).
Implementieren Sie die Benutzerregistrierungsfunktion und die Unternehmensregistrierungsfunktion separat in Rails devise
[Rails] Implementieren Sie die Funktion zur Beantragung / Genehmigung einer Community-Mitgliedschaft mithilfe von Many-to-Many-Zuordnungen
[Rails] Eine einfache Möglichkeit, eine Selbsteinführungsfunktion in Ihrem Profil zu implementieren
Implementieren Sie eine verfeinerte Suchfunktion für mehrere Modelle ohne Rails5-Juwel.
Ich habe versucht, die Ajax-Verarbeitung der ähnlichen Funktion in Rails zu implementieren
Lassen Sie uns eine TODO-App in Java 6 erstellen. Implementierung der Suchfunktion
Implementieren Sie die PHP-Implodierungsfunktion in Java
Implementieren Sie ein Kontaktformular in Rails
Implementieren Sie die Spring Boot-Anwendung in Gradle
Rails 6 (standardmäßig mit Webpacker) implementiert die Sternebewertungsfunktion
[Ruby on Rails] Suchfunktion (nicht ausgewählt)
[Rails] Funktionseinschränkungen im Gerät (Login / Logout)
So implementieren Sie Ranking-Funktionen in Rails
[Rails] Zusammenfassung der Methoden zur Konvertierung / Überprüfung / Suche
Implementieren Sie Schaltflächenübergänge mit link_to in Rails
[Rails] So bedienen Sie die in der Hauptanwendung verwendete Hilfsmethode mit Administrate
Über den Fall, in dem der Freeter "Docker" versucht hat, Docker in die vorhandene Rails-Anwendung einzufügen
Schienenmethode
Nuxt.js × Erstellen Sie eine Anwendung im Rails-API-Modus
[Rails] Implementierung der Suchfunktion mit Gem's Ransack
[Bestellmethode] Legen Sie die Reihenfolge der Daten in Rails fest
Wo ich im heutigen "Rails Tutorial" (2020/10/08) stecken geblieben bin
Implementieren Sie eine Freigabeschaltfläche in Rails 6, ohne Gem zu verwenden
Buchungsfunktion implementiert durch asynchrone Kommunikation in Rails
Implementieren Sie die Teilübereinstimmungssuchfunktion ohne Ransuck
Implementieren Sie den Algorithmus in Ruby: Tag 3-Dichotomie-
Wo ich im heutigen "Rails Tutorial" (2020/10/05) stecken geblieben bin