我目前正在Rails中构建一个在线库,其中包含不同子类别的书籍,然后是类别。换言之;
Books belong to Subcategories
Subcategories belong to Categories我使用PG_search作为搜索功能,下面是我搜索书籍的搜索方法,,它运行良好的
pg_search_scope :search,
against: [:name, :description, :author, :abstract],
associated_against: { category: [:name ], subcategory: [:name ] },
using: { tsearch: { prefix: true, dictionary: "english" } }控制器的索引操作如下所示:
def index
if params[:query].present?
@books = Book.search(params[:query])
else
@books= Book.all
end
end但是,当我试图在图书控制器的索引操作中按类别实现过滤器时:
def index
if params[:category].present? or params[:category][:id].present?
@books = Category.find(params[:category][:id]).books.search(params[:query])
else
@books= Book.all
end
end我遇到了这个错误:
NilClass的
未定义方法‘[]’
以下是我的视图实现
<div class="advanceSearch">
<%= form_tag(books_path, method: :get) do %>
<%= text_field_tag :query, params[:query], {placeholder: 'eg: Ruby', :class => 'searchForm'} %>
<%= collection_select :category, :id, Category.all.order('name ASC'), :id, :name,{include_blank: 'Select Category'}, { :class => 'form-control'} %>
<button type="submit">
Search
<%= image_tag("searchIcon.svg", :alt => "search", :class => "") %>
</button>
<% end %>
</div>我将感激任何形式的帮助,这将使我能够按类别和子类别过滤书籍,如果可能的话,。谢谢。
发布于 2020-04-03 08:11:23
您的状态是双if (if if),我相信您希望使用and而不是or
def index
if params[:category].present? and params[:category][:id].present?
@books = Category.find(params[:category][:id]).books.search(params[:query])
else
@books= Book.all
end
endhttps://stackoverflow.com/questions/61006220
复制相似问题