App: SNS, wo Sie Fotos und Informationen von Ramen-Shops mit Ihren Freunden teilen können Ruby: 2.6.5 Rails: 5.2.0
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>
・
・
・
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.)
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.
%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.
↓
[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