2017-05-30 2 views
-2

J'ai été en mesure d'obtenir un champ de recherche de base fonctionnant parfaitement sur ma barre de navigation en utilisant elasticsearch/searchkick. À l'heure actuelle, la seule façon d'exécuter une requête est si un utilisateur tape et appuie ensuite sur . Entrez sur son clavier. Cependant, je voudrais également permettre à un utilisateur de taper sa requête puis de cliquer sur l'icône de recherche et d'exécuter la recherche. Si quelqu'un peut m'aider serait grandement apprécié, j'ai énuméré tout mon code pertinent ci-dessous.Comment autoriser un utilisateur à cliquer sur une icône de recherche afin d'exécuter sa requête de recherche à l'aide de elasticsearch/searchkick?

Book.rb

class Book < ApplicationRecord 
has_many :likes, :counter_cache => true 
has_many :users, through: :likes 

searchkick 
end 

books_controller.rb

class BooksController < ApplicationController 
before_action :authenticate_user!, only: [:new, :create] 
before_action :set_book, only: [:show, :edit, :update, :destroy, :share] 

def index 
@books = Book.all 
end 

def search 
query = params[:q].presence || "*" 
@booksearches = Book.search(query) 
end 

private 
    def set_book 
    @book = Book.find(params[:id]) 
end 

def book_params 
    params.require(:book).permit(:title, :author, :avatar) 
end 

application_controller.rb

class ApplicationController < ActionController::Base 
protect_from_forgery with: :exception 
def search 
@booksearches = Book.search(params.fetch(:q, "*")) 
end 
end 

application.html.erb

<body style="background-color: #f5f8fa; padding-top: 70px;" class="<%= @body_class %>"> 
<nav class="navbar navbar-default navbar-fixed-top"> 
<div class="collapse navbar-collapse" id="bs-example-navbar-collapse-1"> 
     <ul class="nav navbar-nav"> 
     <li> 
      <%= form_tag search_books_path, id:"searchform" do %> 
       <%= text_field_tag :q, nil, placeholder: "Search..." %> 
       <i class="fa fa-search" aria-hidden="true"></i>      
      <% end %> 
     </li>   
     </ul> 
</div> 
</nav> 
</body> 

Répondre

0

Après plus de recherche, je me suis rendu ce que je manquais était simple submit-tag/soumettre type dans ma forme. J'ai fourni le code qui a fonctionné pour moi ci-dessous ainsi qu'une explication au cas où quelqu'un d'autre trébuche comme je l'ai fait.

Étapes 1: Un formulaire qui n'inclut pas de balise de soumission ou de bouton de type égal à soumettre sera défini par défaut sur la touche d'entrée correspondant à l'action de soumission. Étape 2 (Envoyer la balise): Si vous utilisez un bouton de soumission avec des mots et aucune icône d'amorçage, il vous suffit d'ajouter une balise de soumission.

<%= submit_tag "Search", name: nill %> 

Étape 3:

si vous utilisez une icône d'amorçage - créez simplement un bouton et attribuer un type de lui soumettre.

<%= button_tag(type: "submit", class: "btn btn-default") do %> 
<i class="fa fa-search" aria-hidden="true"></i> 
<% end %> 

Mon code final ressemblait à ceci:

<%= form_tag search_books_path, id:"searchform" do %> 
<%= text_field_tag :q, nil, placeholder:"Search..." %> 
<%= button_tag(type: "submit", class: "btn btn-default") do %> 
<i class="fa fa-search" aria-hidden="true"></i> 
<% end %> 
<% end %>