请给我一些帮助。我正在建立一个数字图书馆,我想按名称,作者和描述搜索书籍,并按每本书分类的类别对其进行过滤。
每本书都放在一个子类别下,而该子类别则放在一个类别下。因此,对于每本书而言,它属于一个类别,而该类别又属于一个子类别。
模型关联是这样的
这是类别模型的代码
class Category < ApplicationRecord
has_many :sub_categories
has_many :books
end
这是子类别模型的代码
class SubCategory < ApplicationRecord
has_many :books
belongs_to :category
end
这是图书模型的代码
class Book < ApplicationRecord
has_many :categories
has_many :subcategories
def self.search(keywords)
if keywords
where("name LIKE ? OR description LIKE ? OR author LIKE ?", "%#{keywords}%", "%#{keywords}%", "%#{keywords}%").order('id DESC')
else
order('id DESC')
end
end
end
Books Controller代码
def index
if params['category'].blank? or params['category']['id'].blank?
@books = Book.all
else
category = Category.find(params['category']['id'])
@books = category.books
end
@books = @books.search(params[:keywords]).paginate(:page => params[:page], :per_page => 9).order('created_at DESC')
end
我有一个要解决的问题,我有一个快速搜索表和一个高级搜索表。高级搜索表单可以使用,但我只希望在启动搜索操作时才在“图书索引”页面上显示高级搜索表单,否则就不会显示。
此外,当使用“高级搜索表单”进行搜索时,如果找到结果,它应该向我显示此消息“ 显示:关键字的书”,如果没有找到结果,则应显示出现此消息“ 未找到结果”
这是我在“图书”索引页中的高级搜索表单代码
<%= form_tag(books_path, method: :get) do %>
<%= text_field_tag :keywords, params[:keywords] %>
<%= collection_select :category, :id, Category.all.order('name ASC'), :id, :name,{include_blank: 'Select Category'} %>
<%= submit_tag 'Search', name: nil %>
<% end %>
如何为该高级搜索实现if语句。
仅在启动搜索操作时,以及在使用“高级搜索表单”进行搜索时,如何使用if语句在“图书索引”页面上显示高级搜索表单? 显示图书:关键字”,如果没有找到结果,则应向我显示此消息“ 未找到结果”
我曾尝试从此处的贡献者的建议中实施图书索引页面上的“无记录”,但我也遇到错误。
这是我的代码
<%= render 'advanced_search' if @show_advanced_search %>
<% if @books.empty? %>
<p>No Records Found</p>
<% else %>
....
<% end %>
请提供任何形式的帮助,我们将不胜感激。谢谢
答案 0 :(得分:0)
您可以在进行快速搜索后设置标记:
def index
if params['category'].blank? or params['category']['id'].blank?
@books = Book.all
else
category = Category.find(params['category']['id'])
@books = category.books
@show_advanced_search = true
end
@books = @books.search(params[:keywords]).paginate(:page => params[:page], :per_page => 9).order('created_at DESC')
end
然后,在视图中:
<%= render 'advanced_search' if @show_advanced_search %>
更新:基于结果的条件文本:
<% if @books %>
<h3>Showing books for <%= @keywords %></h3>
.
.
.
<% else %>
No results found.
<% end %>