我正在使用 pg_search 进行全文搜索,当我输入搜索词时它工作正常,但是当我给它一个空字符串时,我希望它返回所有模型,而不是我得到任何结果。
如何配置 pg_search_scope 以在空搜索时返回所有模型?
谢谢
我正在使用 pg_search 进行全文搜索,当我输入搜索词时它工作正常,但是当我给它一个空字符串时,我希望它返回所有模型,而不是我得到任何结果。
如何配置 pg_search_scope 以在空搜索时返回所有模型?
谢谢
这是我来自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])