【问题标题】:How to set a 0 result in meta_search before user pressing a search button如何在用户按下搜索按钮之前在 meta_search 中设置 0 结果
【发布时间】:2011-08-15 05:39:09
【问题描述】:

我在我的 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 的最佳方法是什么?

谢谢

【问题讨论】:

    标签: ruby-on-rails ruby-on-rails-3 meta-search


    【解决方案1】:

    我不认为 Meta Search 真正提供了开箱即用的功能,但您总是可以欺骗它。

    def index
      @search = Article.search(params[:search].presence || {:id_lt => 0})
      @places = @search.all
    end
    

    【讨论】:

    • 非常感谢!这正是我正在寻找的
    【解决方案2】:

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

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

    检查哈希是否为空白不是这样做的方法。像{'name_contains' => ''} 这样的散列,如果提交的表单是空白的,将返回false

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

    【讨论】:

    • 是的,您将 nil 对象设置为实例变量@places 是非常正确的,非常感谢!我真的很感激这个帮助)))
    猜你喜欢
    • 2012-12-09
    • 1970-01-01
    • 2016-03-27
    • 2018-12-08
    • 1970-01-01
    • 2016-12-31
    • 1970-01-01
    • 2020-01-18
    相关资源
    最近更新 更多