2012-08-01 75 views
2

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

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

谢谢

+0

我需要这个功能还什么我所做的只是使用'scoped'来返回pg_search创建的Document表中的所有记录,但我不确定pg_search_scope是否使用这个表,我相信它只有在你的模型中使用'multisarchable'时才会使用(用于搜索多个模型同时)如果是这样,那么你可以使用'PgSearch :: Document.scoped'来获取所有记录 – FireDragon 2014-04-03 05:03:15

回答

3

这里是我的回答从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])