Ruby on rails ActiveSearch::EmptyTerError

Ruby on rails ActiveSearch::EmptyTerError,ruby-on-rails,ruby,Ruby On Rails,Ruby,我正在使用Active_搜索插件尝试向我的应用程序添加一些简单的搜索功能,当在数据库中找到它们时,它可以正常工作,但是如果我只是在没有输入的情况下运行搜索,那么它会给我错误消息“ActiveSearch::EmptyTerError” 我如何使搜索操作返回正确的值(它可以做到),而且,如果没有找到任何东西或没有输入任何东西,应用程序会使用flash告诉我这一点 下面是代码: def搜索 if参数[:查询] query=params[:query] @users=User.find\u使用\u术

我正在使用Active_搜索插件尝试向我的应用程序添加一些简单的搜索功能,当在数据库中找到它们时,它可以正常工作,但是如果我只是在没有输入的情况下运行搜索,那么它会给我错误消息“ActiveSearch::EmptyTerError”

我如何使搜索操作返回正确的值(它可以做到),而且,如果没有找到任何东西或没有输入任何东西,应用程序会使用flash告诉我这一点

下面是代码:

def搜索 if参数[:查询] query=params[:query] @users=User.find\u使用\u术语(查询) 否则,即在查询中找不到任何内容,请执行此操作 flash[:注意]=“未找到任何结果” 重定向到:操作=>“主页” 终止 终止


非常感谢您的任何想法。

您必须使用
rescue
块处理错误:

def search
  @users = User.find_using_term params[:query]
rescue ActiveSearch::EmptyTermError
  flash[:notice] = "No Results Found"
  redirect_to :action => "home"
end
这样,如果搜索运行正常,但结果集仍然为空,则不会重定向。下面是一些代码,它会闪烁并重定向空结果和空Y错误

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
如果我们得到结果,
返回就离开

rescue
块是空的,它只是让错误通过


无论我们是否处理了异常,
确保
块都会运行。(但如果我们在此之前返回,肯定不会。)

两者之间有区别 User.find() vs User.find_all()

如果没有找到记录,第一个将抛出异常。第二个将返回零。在第一种情况下,它就像您正在通过“主键”进行搜索


可能与您的问题有关…

find_using_term是ActiveSearch插件中的一种方法,它不是动态查找器。
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