[RUBY] Implementierung der Suchfunktion Lernnotiz (Portfolioerstellung)

Einführung

Beim Erstellen des Portfolios habe ich eine Suchfunktion implementiert, sodass ich einen Artikel als Memo veröffentlichen werde

Erstellen Sie Sucheingabefelder und Schaltflächen

app/views/tweet/index

= form_with(url: search_tweets_path, local: true, method: :get, class: "search-form") do |form|
  = form.text_field :keyword, placeholder: "Suche nach Beiträgen", class: "search-input"
  = form.submit "Suche", class: "search-btn"

Legen Sie das Routing für die Suchaktion fest

routes

 resources :tweets do 
    resources :comments, only: :create
      collection do #hinzufügen
        get 'search' #hinzufügen
      end  #hinzufügen
~ Abkürzung ~
  end

Es wird wie folgt angezeigt. image.png

Punkt

** In Rails gibt es Sammlungen und Mitglieder, mit denen andere Routing als 7 Aktionen konfiguriert werden können **

- -
collection Zum Weiterleiten:ID ist nicht angehängt
member Zum Weiterleiten:ID ist beigefügt

** Dieses Mal werde ich verwenden. ** **. ** Führen Sie nach der Definition Schienenrouten durch und überzeugen Sie sich selbst. ** **.

Definieren Sie die Suchmethode im Tweet-Modell

Definieren Sie eine Methodensuche für die Suche aus der Tabelle im Modell.

Logik wie das Suchen aus Sicht von MVC sollte im Modell gemeinsam als Methode definiert werden.

** Definieren Sie die Suchmethode im Tweet-Modell. Verwenden Sie die where-Methode und die LIKE-Klausel, um Beiträge abzurufen, die die gesuchten Schlüsselwörter enthalten. ** **.

Modell bearbeiten

Fügen Sie der Datei / models / tweet.rb Folgendes hinzu.

def self.search(search)
    if search
      Tweet.where('text LIKE(?)', "%#{search}%")
    else
      Tweet.all
    end
  end

Punkt

über die where-Methode

Eine der ActiveRecord-Methoden. Durch Angabe einer Bedingung im Argumentteil wie model .where (Bedingung) können Sie eine Instanz des Datensatzes abrufen, die der Bedingung in der Tabelle in Form eines Arrays entspricht.

Stellen Sie sicher, dass Sie die "zu durchsuchende Spalte" in die Argumentbedingung aufnehmen und den bedingten Ausdruck beschreiben.

Modell-.where('Bedingter Ausdruck einschließlich der zu durchsuchenden Spalte')

Über die LIKE-Klausel

Die LIKE-Klausel ermöglicht die Suche nach mehrdeutigen Zeichenfolgen und wird mit der where-Methode verwendet.

Wenn Sie beispielsweise nach Daten suchen möchten, die die Zeichenfolge "a" im ersten Zeichen enthalten, Daten, die "b" im letzten Zeichen enthalten, oder Daten, die "c" in der Mitte der Zeichenfolge enthalten, ein mehrdeutiges Zeichen Suchen mit Spalten.

Ausführungsbeispiel Ausführungsbeispiel
where('title LIKE(?)', "a%") Titel beginnend mit a
where('title LIKE(?)', "%b") Titel mit der Endung b
where('title LIKE(?)', "%c%") Titel mit c
where('title LIKE(?)', "d_") Titel aus zwei Buchstaben beginnend mit d
where('title LIKE(?)', "_e") Titel aus zwei Buchstaben, der mit e endet

Suchaktion im Controller definieren

Rufen Sie die im Modell geschriebene Suchmethode auf. Die Suchergebnisse werden übergeben, indem params [: keyword] in das Argument der seach-Methode geschrieben werden.

Außerdem wird der Ausnahmeoption before_action: search hinzugefügt, um zu vermeiden, dass sie auf die oberste Seite umgeleitet wird, wenn sie nicht angemeldet ist.

app/controllers/tweets_controller.rb


  before_action :move_to_index, except: [:index, :show, :search]

 def search
    @tweets = Tweet.search(params[:keyword])
  end

~ Abkürzung ~

 private
  def move_to_index
    redirect_to action: :index unless user_signed_in?
  end

Schließlich erstellen Sie HTML

Die Beschreibung ist unten

app/views/tweets/search.html.erb


= form_with(url: search_tweets_path, local: true, method: :get, class: "search-form") do |form|
  = form.text_field :keyword, placeholder: "Suche nach Beiträgen", class: "search-input"
  = form.submit "Suche", class: "search-btn"
.contents.row
  - @tweets.each do |tweet|
    = render partial: "tweet", locals: { title: tweet }

Die Beschreibung der Tweet-Teilvorlage lautet in meinem Fall wie folgt. Es ist immer noch unvollständig, aber hier hat es vorerst gut funktioniert. app/views/tweets/_tweet.html.erb

.users_tweets
  - @tweets.each do |tweet|
    .users_tweets__lists
      .users_tweets__lists_list
        .users_tweets__lists_list__tweet_image
          = link_to tweet_path(tweet) do
            = attachment_image_tag tweet, :image
          = tweet.title
            
        .users_tweets__lists_list__user_image    
          = link_to user_path(tweet.user.id) do
            = attachment_image_tag tweet.user, :profile_image, fallback: "no-image.png "  
          = link_to tweet.user.username,user_path(tweet.user.id)  
          
        .users_tweets__lists_list__user_name  
          = tweet.updated_at.strftime("%Y-%m-%d %H:%M")
Aktualisierungsdatum
          - if current_user.already_liked?(tweet)
            = link_to tweet_likes_path(tweet), method: :delete do
              %i.fas.fa-heart
          - else
            = link_to tweet_likes_path(tweet), method: :post do
              %i.far.fa-heart
          = tweet.likes.count

Ich denke, Sie können es jetzt implementieren!

Wenn Sie eine Fehlermeldung erhalten, kommentieren Sie bitte.

Vielen Dank!

Recommended Posts

Implementierung der Suchfunktion Lernnotiz (Portfolioerstellung)
Implementierung der Suchfunktion
Implementierung der sequentiellen Suchfunktion
[Rails] Implementierung der Suchfunktion mit Gem's Ransack
Implementierung der Pagenationsfunktion
Suchfunktion [Implementierung kopieren und einfügen]
Implementierung der Fuzzy-Suchfunktion für Schienen
Implementierung einer ähnlichen Funktion (Ajax)
Implementierung der Bildvorschau
[Rails] Implementierung der Kategoriefunktion
Implementierung der Kategorie-Pulldown-Funktion
[Rails] Implementierung der Tutorial-Funktion
[Rails] Implementierung einer ähnlichen Funktion
[Rails] Implementierung einer mehrschichtigen Kategoriefunktion unter Verwendung der Abstammung "Erstellungsformular"
[Rails] Asynchrone Implementierung der Like-Funktion
[Rails] Implementierung der Bildvorschau
[Rails] Über die Implementierung der Like-Funktion
[Rails] Memo zur Implementierung der Kommentarfunktion
Implementierung einer ähnlichen Funktion in Java
Lassen Sie uns eine TODO-App in Java 6 erstellen. Implementierung der Suchfunktion
Implementierung der Benutzerauthentifizierungsfunktion mit devise (2)
Implementierung der Benutzerauthentifizierungsfunktion mit devise (1)
Rails [Für Anfänger] Implementierung der Kommentarfunktion
Implementierung der Benutzerauthentifizierungsfunktion mit devise (3)
[Ruby on Rails] Implementierung einer ähnlichen Funktion
Implementierung der Ruby on Rails-Anmeldefunktion (Sitzung)
Die heutige Lernzusammenfassung: Mit Implementierung der Benutzerverwaltungsfunktion
[Rails] Implementierung der Bildvergrößerungsfunktion mit Lightbox2
Implementierungsnotiz für SKStoreReviewController in der Swift-Benutzeroberfläche von iOS14
[JQuery] Implementierungsverfahren der AutoComplete-Funktion [Java / Spring]
Implementierung der Löschfunktion (wenn Sie einen fremden Schlüssel haben)
Implementierung der DM-Funktion
[Rails] Implementierung der Drag & Drop-Funktion (mit Wirkung)
Implementierung der Ruby on Rails-Anmeldefunktion (Devise Edition)
[Rails] Implementierung einer mehrschichtigen Kategoriefunktion unter Verwendung der Abstammung "Vorbereitung"
[Rails] Implementierung einer mehrschichtigen Kategoriefunktion unter Verwendung der "Seed Edition" der Vorfahren