Rails: фильтрация с поиском PG не работает - PullRequest
0 голосов
/ 03 апреля 2020

В настоящее время я создаю онлайн-библиотеку в Ruby на 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>

Буду признателен за любую форму помощи, которая позволит мне отфильтровать книги по категориям и , если возможно . Спасибо.

1 Ответ

0 голосов
/ 03 апреля 2020

У вас есть двойное значение 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
end
...