Я пытаюсь добавить функцию поиска в свое приложение ruby on rails. Поиск работает нормально, но как я могу добавить проверку, чтобы она отображалась, когда поиск пуст?
Я пытался добавить required: true
, но, похоже, это мало что дает.
index.html.erb:
<%= form_tag topics_path, :method => 'get' do %>
<%= text_field_tag :search, params[:search], required: true %>
<%= submit_tag "Search" %>
<% end %
темы_контроллер:
def index
@topics = Topic.search(params[:search]).paginate(:page => params[:page], :per_page => 5)
end
темы.rb
def self.search(search)
if search
where(["title LIKE ?","%#{search}%"])
else
all
end
Я ожидаю, что вывод будет: 1. Поиск по определенной теме 2. В этом поле нет тем, поэтому отображается подтверждение, например «результаты не найдены, попробуйте еще раз».
@CAmador Извините, в какой текстовый файл мне добавить этот фрагмент кода?
@Крупа topics.rb
@Krupa проверь ответ Яррабхуми; тоже должно работать
@RocKhalil Он по-прежнему просто отображает пустой экран. Как я могу добавить к этому подтверждение?
просто обновите код в контроллере, как показано ниже, чтобы вы получали необходимые записи, когда присутствует поиск, иначе все записи, если параметры поиска отсутствуют.
def index
if params[:search].present?
@topics = Topic.search(params[:search]).paginate(:page => params[:page], :per_page => 5)
flash[:notice] = "No records found based on the search." if @topics.blank?
else
@topics = Topic.all
flash[:notice] = "No records found in Database." if @topics.blank?
end
end
После добавления этого фрагмента кода в контроллер результат по-прежнему остается пустым. Могу ли я добавить проверку в контроллере, например «уведомление: «Эта тема не существует, попробуйте еще раз».
@krupa есть ли записи в базе данных? дело в том, что проверки разные, они используются для того, чтобы сделать поле обязательным и проверить, соответствует ли ввод требованиям, когда вы вводите данные в базу данных. но в индексе вы просто получаете все данные, которые когда-либо присутствовали в базе данных.
@krupa обновил мой ответ, чтобы отображать уведомления на основе данных. Если он работает нормально, проголосуйте за ответ.
Вы можете добавить флэш-сообщение в контроллер:
flash[:notice] = "No result found"
Ваш контроллер должен быть таким:
def index
@topics = Topic.search(params[:search]).paginate(:page => params[:page], :per_page => 5)
if @topics.present?
flash[:success] = "Any message!"
//redirection
else
flash[:success] = "No result found"
//redirection
end
end
Для реализации флэш-сообщения. См. ссылку: https://stackoverflow.com/a/55590536/11094356
Проверить содержимое:
if search.present?
, потому чтоsearch == ""
если ввод пуст.