Rails: поиск и фильтрация книг по категориям с информацией - PullRequest
0 голосов
/ 30 апреля 2019

Мне нужна помощь, пожалуйста.Я создаю цифровую библиотеку и хотел бы найти книги по названию, автору и описанию, а также отфильтровать их по категориям, по которым классифицируется каждая книга.

Каждая книга находится в подкатегории.который находится под категорией.Таким образом, для каждой книги она принадлежит категории, которая принадлежит подкатегории.

Ассоциация моделей выглядит следующим образом:

Это код для модели категории

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

Код контроллера книг

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 %>

Error Message

Пожалуйста, я буду признателен за любую форму помощи.Спасибо

1 Ответ

0 голосов
/ 30 апреля 2019

Вы можете установить флаг aa, когда был выполнен быстрый поиск:

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 %>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...