如何使用 elasticsearch/searchkick 到 运行 导航栏上的搜索栏并在特定页面中显示结果?
How to use elasticsearch/searchkick to run a search bar on my navbar and show results in a specific page?
我刚刚看完了一些有关搜索的教程。我想将我的搜索栏放在我的导航栏上,这样每当有人搜索结果时,我就会被带到我的书文件夹中的 search.html.erb(类似于 SO 的工作方式)。不过,我 运行 遇到了一个问题,每次我进行搜索时,我都会被带到我的图书页面 [http://localhost:3000/books?utf8=%E2%9C%93&q=travel],但没有显示任何结果,只有我的标准索引显示了我所有的图书,并且从未被带到我的搜索中结果页面。我在下面列出了所有相关代码。如果有人可以帮助我,将不胜感激。非常感谢你们!
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
@booksearches = Book.search(params.fetch(:q, "*"))
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 books_path, method: :get do %>
<%= text_field_tag :q, nil, placeholder: "Search..." %>
<% end %>
</li>
</ul>
</div>
</nav>
</body>
通过反复试验进行了研究和破解,但最终能够让它发挥作用。如果其他人有类似的问题,我在下面概述了对我有用的方法。
三步走
- 将 post 添加到您的路由文件,以便用户可以转到搜索结果页面。
post 'books/search' => 'books#search', 如: 'search_books'
2.Adjust 您的 form_tag 在您的 application.html.erb 上,以便它可以正确指向您的搜索结果页面
<%= form_tag search_books_path do %>
<%= text_field_tag :q, nil, placeholder: "Search..." %>
<% end %>
- 在您的 search.html.erb 中确保列出您的搜索结果
<% @booksearches.each do |booksearch| %><div><h3><%= link_to booksearch.title, booksearch %></h3></div>
<% end %>
我刚刚看完了一些有关搜索的教程。我想将我的搜索栏放在我的导航栏上,这样每当有人搜索结果时,我就会被带到我的书文件夹中的 search.html.erb(类似于 SO 的工作方式)。不过,我 运行 遇到了一个问题,每次我进行搜索时,我都会被带到我的图书页面 [http://localhost:3000/books?utf8=%E2%9C%93&q=travel],但没有显示任何结果,只有我的标准索引显示了我所有的图书,并且从未被带到我的搜索中结果页面。我在下面列出了所有相关代码。如果有人可以帮助我,将不胜感激。非常感谢你们!
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
@booksearches = Book.search(params.fetch(:q, "*"))
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 books_path, method: :get do %>
<%= text_field_tag :q, nil, placeholder: "Search..." %>
<% end %>
</li>
</ul>
</div>
</nav>
</body>
通过反复试验进行了研究和破解,但最终能够让它发挥作用。如果其他人有类似的问题,我在下面概述了对我有用的方法。
三步走
- 将 post 添加到您的路由文件,以便用户可以转到搜索结果页面。
post 'books/search' => 'books#search', 如: 'search_books'
2.Adjust 您的 form_tag 在您的 application.html.erb 上,以便它可以正确指向您的搜索结果页面
<%= form_tag search_books_path do %>
<%= text_field_tag :q, nil, placeholder: "Search..." %>
<% end %>
- 在您的 search.html.erb 中确保列出您的搜索结果
<% @booksearches.each do |booksearch| %><div><h3><%= link_to booksearch.title, booksearch %></h3></div>
<% end %>