我在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结果的最佳方法是什么?
谢谢
我不认为这是Meta Search真正提供的东西,但你总是可以欺骗它。
def index
@search = Article.search(params[:search].presence || {:id_lt => 0})
@places = @search.all
end
我认为你的解决方案已经足够好了。很清楚它在做什么,它不会不必要地访问数据库。但是代码可以改进为:
def index
@search = Article.search(params[:search])
@places = @search.search_attributes.values.all?(&:blank?) ? [] : @search.all
end
检查哈希是否为空白不是这样做的。如果提交的表单是空白的,那么像{'name_contains' => ''}
这样的散列将返回false
。
最好将@places
设置为空数组而不是nil
。这样你就不需要检查nil
,你的循环仍然可以工作。