2
我使用pg_search进行全文搜索,当我输入搜索词时它工作正常,但是当我给它一个空字符串时,我期望它返回所有模型,而不会得到任何结果。pg_search_scope与空字符串
如何配置pg_search_scope以返回空搜索的所有模型?
谢谢
我使用pg_search进行全文搜索,当我输入搜索词时它工作正常,但是当我给它一个空字符串时,我期望它返回所有模型,而不会得到任何结果。pg_search_scope与空字符串
如何配置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
这个解决方案应该仍然是可链接的,所以你可以安全地调用您的控制器是这样的(假设你使用分页库像雷。
MyModel.where(:published => true).search(params[:query]).page(params[:page])
我需要这个功能还什么我所做的只是使用'scoped'来返回pg_search创建的Document表中的所有记录,但我不确定pg_search_scope是否使用这个表,我相信它只有在你的模型中使用'multisarchable'时才会使用(用于搜索多个模型同时)如果是这样,那么你可以使用'PgSearch :: Document.scoped'来获取所有记录 – FireDragon 2014-04-03 05:03:15