如何允许用户点击搜索图标以使用elasticsearch / searchkick运行他的搜索查询?

时间:2017-05-30 00:34:32

标签: ruby-on-rails ruby-on-rails-5 searchkick

我能够使用elasticsearch / searchkick在我的导航栏上完美地运行基本搜索字段。目前,查询可以执行的唯一方法是用户键入,然后在他或她的键盘上按 Enter 。但是,我还想让用户输入他们的查询,然后单击搜索图标并执行搜索。如果有人能帮助我,我将不胜感激,我已在下面列出了我的所有相关代码。

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>

1 个答案:

答案 0 :(得分:0)

经过更多的研究,我意识到我所缺少的是一个简单的提交标签/提交类型。我提供了下面适合我的代码以及解释,以防其他人像我一样绊倒。

第1步: 不包含提交标记的表单或类型等于提交的按钮将默认为输入键,即提交操作。

第2步(提交标签): 如果您使用带有单词且没有引导程序图标的提交按钮 - 只需添加提交标签就可以为您提供帮助。

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

第3步:

如果您使用引导图标 - 那么只需创建一个按钮并为其指定一种提交方式。

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

我的最终代码如下:

<%= 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 %>