Мне нужна помощь, пожалуйста.Я создаю цифровую библиотеку и хотел бы найти книги по названию, автору и описанию, а также отфильтровать их по категориям, по которым классифицируется каждая книга.
Каждая книга находится в подкатегории.который находится под категорией.Таким образом, для каждой книги она принадлежит категории, которая принадлежит подкатегории.
Ассоциация моделей выглядит следующим образом:
Это код для модели категории
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 %>
Пожалуйста, я буду признателен за любую форму помощи.Спасибо