2

我正在使用 pg_search 进行全文搜索,当我输入搜索词时它工作正常,但是当我给它一个空字符串时,我希望它返回所有模型,而不是我得到任何结果。

如何配置 pg_search_scope 以在空搜索时返回所有模型?

谢谢

4

1 回答 1

4

这是我来自https://github.com/Casecommons/pg_search/issues/49的回答


我不认为有一个空查询应该总是触发所有记录,原因有几个。

首先,我不认为有一个明确的顺序来返回记录。(通常按搜索排名排序没有查询是没有意义的)

其次,我认为数据库应该定义各种搜索功能如何处理空白字符串,以便所有逻辑都集中在一个地方。

所以,我想提供这个解决方法,我认为它会更适合你的情况。

class MyModel < ActiveRecord::Base
  include PgSearch

  pg_search_scope :search_by_name, :against => :name

  def self.search(query)
    if query.present?
      search_by_name(query)
    else
      # No query? Return all records, newest first.
      order("created_at DESC")
    end
  end
end

这个解决方案应该仍然是可链接的,所以你可以在你的控制器中安全地调用这样的东西(假设你正在使用像 kaminari.

MyModel.where(:published => true).search(params[:query]).page(params[:page])
于 2012-08-14T00:58:25.020 回答