2013-10-03 25 views
0

我在我的Rails項目之一面臨的一個問題。 我的用戶數據庫中包含有特殊字符的名稱,我想他們在搜索結果中顯示,而用簡單的文字搜索它。 例如:假設我有一個名爲「NoëlNocciolo」的用戶(請注意e上的軟標誌),如果我通過「Noel Nocciolo」作爲參數,我希望搜索該用戶。搜索軟體徵與普通字符

誰能告訴我如何與這些案件處理,因爲沒有人知道如何提供「電子與兩個點」的輸入。 ,我使用的是Postgres作爲我DATABSE。

問候, 卡蘭

回答

2

您可以創建單獨的字段「indexed_name」搜索,僅使用ASCII字符填充它。

然後,你必須預處理查詢字符串.gsub('ë', 'e')(或任何其他非ASCII字符的ASCII模擬)以及與此處理查詢

搜索,我相信有任何字符串ASCII模擬信號轉換更優雅的方式我只是給你方向)

+0

這裏的問題是我的查詢字符串包含普通字符(諾埃爾Nocciolo),但我的數據庫記錄中包含非ASCII字符(NOEL Nocciolo)。您提出的解決方案反之亦然。 –

+0

它不是反之亦然,但包括如果用戶找到辦法如何查詢「E」。在簡單的情況下,你只需直接在indexed_name現場搜索,但你如果你已經有分貝填充非ASCII準備吧局面名稱值 – okliv

0

.parameterizeActiveSupport::Inflector.transliterate可能會是您的使用情況下可以接受的。

"àáâãäå".parameterize 
=> "aaaaaa" 

但是,它不會處理連寫,如,所以,你需要:

"àáâãÀffi".mb_chars.normalize(:kd).gsub(/[^\x00-\x7F]/,'').to_s 
=> "aaaaAffi"