ruby 2.5.7 Rails 5.2.4.3 OS: macOS Catalina
1 Erstellen Sie einen Controller 2 Routing bearbeiten 2 Ansicht erstellen
Dieses Mal werden wir ein Modell auswählen und suchen.
Terminal
$ rails g controller searchs
rb:app/controllers/searchs.controller.rb
class SearchsController < ApplicationController
def search
@model = params["model"]
@content = params["content"]
@method = params["method"]
@records = search_for(@model, @content, @method)
end
private
def search_for(model, content, method)
if model == 'user'
if method == 'perfect'
User.where(name: content)
else
User.where('name LIKE ?', '%'+content+'%')
end
elsif model == 'post'
if method == 'perfect'
Post.where(title: content)
else
Post.where('title LIKE ?', '%'+content+'%')
end
end
end
end
Der Code mit der hinzugefügten Ergänzung lautet wie folgt.
rb:app/controllers/searchs.controller.rb
class SearchsController < ApplicationController
def search
#Formular anzeigen_Am Tag
#Der Wert des ausgewählten Modells@Dem Modell zugeordnet.
@model = params["model"]
#Der Wert der ausgewählten Suchmethode@Methode zuweisen.
@method = params["method"]
#Suchbegriff@Inhalt zuweisen.
@content = params["content"]
# @model, @content, @Substituierte Methode,
# search_zum@Datensätzen zuordnen.
@records = search_for(@model, @content, @method)
end
private
def search_for(model, content, method)
#Wenn das ausgewählte Modell Benutzer ist
if model == 'user'
#Wenn die ausgewählte Suchmethode genau übereinstimmt
if method == 'perfect'
User.where(name: content)
#Wenn die ausgewählte Suchmethode teilweise übereinstimmt
else
User.where('name LIKE ?', '%'+content+'%')
end
#Wenn das ausgewählte Modell post ist
elsif model == 'post'
if method == 'perfect'
Post.where(title: content)
else
Post.where('title LIKE ?', '%'+content+'%')
end
end
end
end
config/routes.rb
get '/search', to: 'searchs#search'
Diesmal habe ich eine Teilvorlage verwendet. Die folgende Teilvorlage kann mit <% = render'searchs / form '%> verwendet werden.
erb:app/views/searchs/_form.html.erb
<% if user_signed_in? %>
<%= form_tag(search_path, method: :get) do %>
<%= text_field_tag 'content' %>
<%= select_tag 'model', options_for_select({ "User" => "user", "Post" => "post" }) %>
<%= select_tag 'method', options_for_select({ "Perfekte Übereinstimmung" => "perfect", "Teilweise Übereinstimmung" => "partial" }) %>
<%= submit_tag 'Suche' %>
<% end %>
<% end %>
app/views/homes/mypage
...
<%= render 'searchs/form' %>
...
erb:app/views/searchs/search.html.erb
<% if @model == 'user' %>
<h3>[Benutzermodell Suchergebnisse] Suchwort:<%= @content %></h3>
<%= render 'users/index', users: @records %>
<% else @model == 'posts' %>
<h3>[Beiträge Modellsuchergebnisse] Suchwort:<%= @content %></h3>
<%= render 'posts/index', posts: @records %>
<% end %>
Inhalt der Teilvorlage
erb:app/views/posts/_index.html.erb
<table>
<thead>
<tr>
<th>Gepostet mit Namen</th>
<th>Titel</th>
<th>Text</th>
<th></th>
<th></th>
<th></th>
</tr>
</thead>
<tbody id="post">
<% posts.each do |post| %>
<tr>
<td><%= post.user.name %></td>
<td><%= post.title %></td>
<td><%= post.body %></td>
<td><%= link_to "Einzelheiten", post_path(post) %></td>
<% if post.user == current_user %>
<td><%= link_to "Bearbeiten", edit_post_path(post) %></td>
<td><%= link_to "Löschen", post_path(post), method: :delete, remote: true %></td>
<% else %>
<td></td>
<td></td>
<% end %>
</tr>
<% end %>
</tbody>
</table>
erb:app/views/books/_users.html.erb
<% users.each do |user| %>
<%= link_to user_path(user) do %>
<%= user.name %><br>
<% end %>
<% end %>
Recommended Posts