2012-08-01 82 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])