Implementieren Sie Suchfunktionen für mehrere Modelle, ohne Ransack zu verwenden. Die Suchmethode und das Suchmodell können aus dem Pulldown-Menü ausgewählt werden. Der Suchbildschirm wird direkt unter der Kopfzeile implementiert, und der Bildschirm zur Anzeige der Suchergebnisse erstellt eine neue Ansicht. Ich bin ein Neuling, ungefähr einen Monat nachdem ich angefangen habe, Schienen zu studieren. Bitte verpassen Sie keine seltsamen Ausdrücke oder Beschreibungen ... (oder weisen Sie in der Frage darauf hin)
ruby '2.6.3' gem 'rails', '~> 5.2.4', '>= 5.2.4.3' gem'bootstrap-sass ',' ~> 3.3.6 '(nicht erforderlich)
Bitte erstellen Sie das Benutzermodell und das Postmodell im Voraus. Ich habe Devise implementiert.
Geben Sie auf der vom Benutzer veröffentlichten Website die folgenden drei Eingaben in die Kopfzeile ein: Suchen und Übergang zum Anzeigebildschirm.
① Wählen Sie im Pulldown-Menü (form_with) die Option Benutzersuche oder Post-Suche (Buchmodell in meiner App). (2) Wählen Sie die Auswahlmethode als exakte Übereinstimmung, Präfixübereinstimmung, Suffixübereinstimmung oder teilweise Übereinstimmung mit dem Auswahltag aus. ③ Geben Sie ein Schlüsselwort ein
$ rails g controller Search search
routes.rb
get '/search' => 'search#search'
_header.html.erb
*Der Code über dieser Zeile wird weggelassen
<div class="row">
<div class="col-xs-6 col-xs-offset-3 text-center" style="margin-top: 25px;">
<% if user_signed_in? %>
<%= form_with url:search_path, method: :get, local: true do |f| %>
<%= f.text_field 'search[value]' %>
<%= f.select 'search[model]', options_for_select({ "User" => "user", "Book" => "book" }) %>
<%= f.select 'search[how]', options_for_select({ "Perfekte Übereinstimmung" => "match", "Präfixübereinstimmung" => "forward", "Rückwärtsspiel" => "backward", "Teilweise Übereinstimmung" => "partical" }) %>
<%= f.submit :"Suche" %>
<% end %>
<% end %>
</div>
</div>
search_controller.rb
class SearchController < ApplicationController
def search
@model = params["search"]["model"] #Modell auswählen@Dem Modell zuweisen
@value = params["search"]["value"] #Gesuchte Zeichenkette(Hier Wert)Zu@Wert zuweisen
@how = params["search"]["how"] #Suchmethode auswählen wie@Zuweisen, wie
@datas = search_for(@how, @model, @value) #search_Definieren Sie die Instanzvariable in for argument
end #@Daten enthalten die endgültigen Suchergebnisse
private
def match(model, value) #def search_Verarbeitung, wann wie übereinstimmt
if model == 'user' #Verarbeitung, wenn das Modell Benutzer ist
User.where(name: value) #Wo finde ich einen Namen, der genau dem Wert entspricht?
elsif model == 'book'
Book.where(title: value)
end
end
def forward(model, value)
if model == 'User'
User.where("name LIKE ?", "#{value}%")
elsif model == 'book'
Book.where("title LIKE ?", "#{value}%")
end
end
def backward(model, value)
if model == 'user'
User.where("name LIKE ?", "%#{value}")
elsif model == 'book'
Book.where("title LIKE ?", "%#{value}")
end
end
def partical(model, value)
if model == 'user'
User.where("name LIKE ?", "%#{value}%")
elsif model == 'book'
Book.where("title LIKE ?", "%#{value}%")
end
end
def search_for(how, model, value) #Die in der Suchaktion definierten Informationen sind im Argument enthalten
case how #Der Prozess des Suchens aus dem bedingten Zweig von wann, welches der Inhalt von wie der Suchmethode ist
when 'match'
match(model, value) #Im Argument der Suchmethode(model, value)Ist definiert
when 'forward' #Wenn beispielsweise wie übereinstimmt, fahren Sie mit der Verarbeitung der def-Übereinstimmung fort.
forward(model, value)
when 'backward'
backward(model, value)
when 'partical'
partical(model, value)
end
end
end
#Präfixübereinstimmung
Modellname.where("Spaltenname LIKE?", "Wert%")
#Rückwärtsspiel
Modellname.where("Spaltenname LIKE?", "%Wert")
#Teilweise Übereinstimmung
Modellname.where("Spaltenname LIKE?", "%Wert%")
Ich werde es in views / search / search.html.erb beschreiben
search.html.erb
<div class="container">
<div class="col-xs-12">
<% if @model == "user" %>
<h2>Users search for '<%= @value %>'</h2>
<table class="table">
<thead>
<tr>
<th></th>
<th>Name</th>
<th>Introduction</th>
</tr>
</thead>
<% @datas.each do |user| %>
<tbody>
<tr>
<th>
<%= attachment_image_tag(user, :profile_image, :fill, 40, 40, fallback: "no_image.jpg ", size:'40x40') %>
</th>
<th>
<%= user.name %>
</th>
<th>
<%= user.introduction %>
</th>
</tr>
</tbody>
<% end %>
<% elsif @model == "book" %>
<h2>Books search for '<%= @value %>'</h2>
<table class="table">
<thead>
<tr>
<th></th>
<th>Title</th>
<th>Opinion</th>
</tr>
</thead>
<% @datas.each do |book| %>
<tbody>
<tr>
<th>
<%= attachment_image_tag(book.user, :profile_image, :fill, 40, 40, fallback: "no_image.jpg ", size:'40x40') %>
</th>
<th>
<%= book.title %>
</th>
<th>
<%= book.body %>
</th>
</tr>
</tbody>
<% end %>
<% end %>
</table>
</div>
</div>