让我们说我有一本书模型。 我想搜索我所有的书名,我现在已经在select2rails的帮助下完成了。每本书属于一个类别,我想启用一个“过滤器”功能,我选择一个类别,我的搜索栏显示所有结果,但只在选定的类别中。
例如:
我有一本名为Lord of the rings的书属于幻想类别。我还有一个属于该类别的家族的主人。当我在搜索栏中输入lord时,将显示两个标题,但我想要选择一个类别。
(我已经阅读了有关select2的文档,并且无法找到任何可以帮助我解决此问题的内容。)
示例:选择的类别=幻想
我输入了领主,只会显示戒指的主人。
我如何实现这一目标?
<!-- Search Widget -->
<div class="card my-auto">
<%= form_with url: books_path , method: :get, local: true do |f| %>
<div class="card-body">
<p>Search for a Book title.</p>
<%= f.collection_select(:book_id, Book.all, :id, :title, {include_blank: 'Book titles'}, {class:'selectbooktitle form-control'}) %>
<hr>
<div class="input-group">
<span class="input-group-btn">
<%= f.submit 'Search', class: 'btn btn-outline-success', method: :put %>
</span>
</div>
</div>
</div>
<% end %>
book.rb
class Book < ApplicationRecord
belongs_to :user
belongs_to :category
has_many :reviews, dependent: :destroy
has_attached_file :book_cover, styles: { book_index: '250x350>', book_show: '325x475>' }
validates_attachment_content_type :book_cover, content_type: /\Aimage\/.*\z/
end
books_controller
def index
if params[:category].blank?
@books = Book.all.order('created_at DESC')
else
@category_id = Category.find_by(name: params[:category]).id
@books = Book.where(category_id: @category_id).order('created_at DESC')
end
return redirect_to book_path(params[:book_id]) if params[:book_id]
end