代码之家  ›  专栏  ›  技术社区  ›  Promise Preston

Rails:PG搜索过滤不起作用

  •  0
  • Promise Preston  · 技术社区  · 6 年前

    我目前正在用Ruby on 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
    

    我遇到了这个错误:

    nil的未定义方法“[]”: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>
    

    我将感谢任何形式的帮助,使我能够 按类别筛选书籍 子类别(如果可能) 谢谢。

    0 回复  |  直到 6 年前
        1
  •  0
  •   KARASZI István    6 年前

    如果你有双倍( 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
    end
    
    推荐文章