ActiveSearch :: EmptyTermError - PullRequest
1 голос
/ 07 мая 2009

Я использую плагин Active_Search, чтобы попытаться добавить некоторые простые функции поиска в мое приложение, оно работает нормально, когда их находят где-то в БД, но если я просто запускаю поиск без ввода, то выдает сообщение об ошибке ActiveSearch :: EmptyTermError».

Как заставить поисковое действие возвращать правильные значения (что оно может сделать), но также, если ничего не найдено или ничего не введено, приложение сообщает мне об этом с помощью вспышки.

Вот код:

</p> <pre> def search if params[:query] query = params[:query] @users = User.find_using_term(query) else #i.e nothing is found in the query so do this flash[:notice] = "No Results Found" redirect_to :action => "home" end end </pre> <p>

Любые идеи будут с благодарностью, спасибо.

Ответы [ 2 ]

0 голосов
/ 07 мая 2009

Существует различие между User.find () против User.find_all ()

Первый вызовет исключение, если записи не найдены. Второй вернет ноль. В случае с первым вы ищете «первичный ключ».

Может быть связано с вашей проблемой ...

0 голосов
/ 07 мая 2009

Вы должны обработать ошибку, используя блок rescue:

def search
  @users = User.find_using_term params[:query]
rescue ActiveSearch::EmptyTermError
  flash[:notice] = "No Results Found"
  redirect_to :action => "home"
end

Тем не менее, если поиск прошел нормально, но набор результатов все еще пуст, вы не будете перенаправлены. Вот некоторый код, который мигает и перенаправляет вас как для пустых результатов, так и для EmptyTermError.

def search
  @users = User.find_using_term params[:query]
  return unless @users.empty?
rescue ActiveSearch::EmptyTermError
ensure
  flash[:notice] = "No Results Found"
  redirect_to :action => "home"
end

return просто уходит, если у нас есть результаты.

Блок rescue пуст, он просто пропускает ошибку.

И блок ensure запускается независимо от того, обрабатывали мы исключение или нет. (Но, конечно, нет, если мы вернемся до этого.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...