2

我在我的 rails 3 应用程序上使用 meta_search。默认情况下(在按下搜索按钮之前)meta_search 返回搜索模型的所有元素。我想在用户按下搜索按钮或搜索参数为空之前设置 0 结果。

我使用 meta_search 如下:

def index
 @search = Article.search(params[:search])
  if params[:search].blank?
    @places = nil
  else
    @places = @search.all
  end
end

如果搜索参数为空,设置 0 结果的最佳方法是什么?

谢谢

4

2 回答 2

2

我不认为元搜索真正提供了开箱即用的东西,但你总是可以欺骗它。

def index
  @search = Article.search(params[:search].presence || {:id_lt => 0})
  @places = @search.all
end
于 2011-04-29T05:06:24.457 回答
1

在我看来,您的解决方案已经足够好了。它在做什么很清楚,它不会不必要地访问数据库。但是代码可以改进为:

def index
  @search = Article.search(params[:search])
  @places = @search.search_attributes.values.all?(&:blank?) ? [] : @search.all
end

检查哈希是否为空白不是这样做的方法。如果提交的表单为空白,您将得到一个类似 的哈希值{'name_contains' => ''},它将返回false

此外,最好设置@places为空数组而不是nil. 这样您就不必检查nil并且您的循环仍然可以工作。

于 2011-04-29T07:40:49.057 回答