Вы должны обработать ошибку, используя блок 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
запускается независимо от того, обрабатывали мы исключение или нет. (Но, конечно, нет, если мы вернемся до этого.)