2010-11-07 81 views
2

我有一個模型,讓我們來說兩個字段:名稱和主題 而且我希望用戶可以在搜索框中鍵入「Maria chubbb」,應用程序應該返回每個記錄來自搜索字符串(或%word%)的至少一個單詞和它的單詞可以在任何字段中。 如何實現這一目標?正在搜索至少一個單詞(活躍記錄)

回答

0

如果你想與普通的ActiveRecord/SQL做到這一點,你可以做這樣的:

words = params[:query].split(' ') 
# => ["Maria", "chubbb"] 
conditions = words.collect {|word| "name LIKE ? OR subject LIKE ?"}.join(" OR ") 
# => "name LIKE ? OR subject LIKE ? OR name LIKE ? OR subject LIKE ?" 
values = words.collect {|word| ["%#{word}%", "%#{word}%"]}.sum 
# => ["%Maria%", "%Maria%", "%chubbb%", "%chubbb%"] 
YourModel.where([conditions] + values) 

以後,如果你想這樣做「正確的」,使用搜索引擎,例如獅身人面像(由Ruby/Rails通過thinking_sphinx寶石連接)。然後在你的模型,你可以定義哪些字段在這樣的搜索包括:

class YourModel < ActiveRecord::Base 
    define_index do 
    indexes :name 
    indexes :subject 
    end 
end 

然後你就可以搜索這樣的:

YourModel.search("Maria chubbb") 

這樣做的優點是,搜索速度快,即使在大數據庫,並且結果可以被加權,例如如果兩者匹配而只有一個詞匹配。