Bonjour,
Cette fois, Gem qui peut implémenter la fonction de recherche à une vitesse explosive
Ransack est.
Non, c'est vraiment pratique. La fonction de recherche est de haut niveau, n'est-ce pas? Je pensais, Avec cette gemme, vous pouvez le faire en environ 30 minutes.
On a l'impression que Gem est à nouveau incroyable. (vocabulaire)
Faisons-le maintenant
gem 'ransack'
Dans le Gemfile.
% bundle install
N'oublie pas
Aller au routage
resources :books do
collection do
get 'search'
end
end
Le routage est
search_books GET /books/search(.:format) books#search
Je me sens comme cela.
Il y a un membre similaire à la collection
member do
get 'search'
end
Vous permet d'inclure l'id dans le routage
search_books GET /books/:id/search(.:format) books#search
Cette fois, je l'ai fait parce que je veux pouvoir rechercher la colonne appelée tag_name dans la base de données du livre.
Ensuite, nous ferons une vue
rails g controller books search
Cela créera un contrôleur et recherchera View.
Contrôleur Contrôleur ♪
books_controller.rb
class BooksController < ApplicationController
before_action :search_book, only: [:index, :search]
def index
@books =Book.all
@book =Book.includes(:user)
set_book_column
end
def search
@results = @p.result
@book = @results.includes(:book)
end
private
def search_book
@p = Book.ransack(params[:q])
end
def set_book_column
@book_name = Book.select("tag_name").distinct
end
end
C'est comme ça.
Book.select("tag_name").distinct
Mettez l'élément que vous souhaitez rechercher à la place de tag_name
books/index.html.reb
<%= search_form_for @p, url: search_books_path do |f| %>
<%= f.label :tag_name_cont, 'Nom de la balise' %>
<%= f.text_field :tag_name_cont, placeholder: "Rechercher par nom de balise" %>
<br>
<%= f.submit 'Chercher' %>
<% end %>
La méthode search_form_for est une méthode spécifique à Lansac
Le contenu de tag_name_cont écrit sur la deuxième ligne est S'il correspond, il sera pris dans la recherche.
C'est celui-là.
Si vous le réglez sur eq, seul le même sera capturé.
Il y en a plusieurs autres, alors jetez un œil! Recommandation de Ransack
Créer un écran de résultats de recherche
books/search.html.erb
<h1 class="search-forms">
Résultats de recherche
</h1>
<head class ="search-book-list">
<div class="book-chosen">
<%#Rechercher la liste de produits applicables%>
<% if @results.length !=0 %>
<% @results.each do |result| %>
<br>
<div class="sec1title">
<div class="item-show">
<h2 class='border01'>
<%= result.genre.type %>
<%= link_to "/books/#{result.id}" do %>
<%end %>
</h2>
<%= image_tag result.image, id: 'slideshow' if result.image.attached? %>
<div class="item-info" >
<h2 id ='item-name'>
<%= result.name %>
</h2>
<form class="item-content-show">
<%= result.content %>
</form>
</div>
<br />
</div>
</div>
<% end %>
<% else %>
<br/>
Il n'y a pas de produit applicable
<br/>
<br/>
<div>
<%=link_to "Rentrer à la maison",root_path%>
</div>
<% end %>
<br>
</div>
<%#Bouton d'accueil%>
<%= render "shared/sidebar" %>
</head>
dekita!:relaxed:
Avec le contrôleur
def search
@results = @p.result
@book = @results.includes(:book)
end
Puisqu'il est écrit comme ça, de @result Je prends la valeur.
N'hésitez pas à commenter si vous faites des erreurs! !!
Recommended Posts