也许你们中的某个人能够帮助我解决这个问题。
假设我有一本书模型。我想搜索我所有的书名,我现在已经在 select2rails 的帮助下完成了。每本书都属于一个类别,我想启用“过滤器”功能,在其中选择一个类别,我的搜索栏会显示所有结果,但仅在所选类别内。
例如 :
我有一本书叫指环王,属于奇幻类。我还有一个家族的书主,属于类别家族。当我在搜索栏中输入 lord 时,两个标题都会显示,但我希望可以选择一个类别。
(我已阅读有关 select2 的文档,但找不到任何可以帮助我解决此问题的内容。)
示例:选择的类别 = 幻想
我输入 lord,只会显示指环王。
我如何实现这一目标?
<!-- 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 %>
书本.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
书籍控制器
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