2
我有一個模型,讓我們來說兩個字段:名稱和主題 而且我希望用戶可以在搜索框中鍵入「Maria chubbb」,應用程序應該返回每個記錄來自搜索字符串(或%word%)的至少一個單詞和它的單詞可以在任何字段中。 如何實現這一目標?正在搜索至少一個單詞(活躍記錄)
我有一個模型,讓我們來說兩個字段:名稱和主題 而且我希望用戶可以在搜索框中鍵入「Maria chubbb」,應用程序應該返回每個記錄來自搜索字符串(或%word%)的至少一個單詞和它的單詞可以在任何字段中。 如何實現這一目標?正在搜索至少一個單詞(活躍記錄)
如果你想與普通的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")
這樣做的優點是,搜索速度快,即使在大數據庫,並且結果可以被加權,例如如果兩者匹配而只有一個詞匹配。