2013-12-16 54 views
0

所以我想通過name搜索我的Person的模型。這個例子可以是「Iñaki」或「Caneça」。我怎麼能做到這一點沒有上或下情況下的擔憂?Ruby比較activerecord與字符串寬度特殊字符

我試過:Person.where("upper(name) = ?", name.upcase)但是如果我輸入IÑAKI或CANEÇA,那當然不會做這項工作。

我知道這個代碼.force_encoding('ISO-8859-1').encode('UTF-8')在其他一些答案建議,但我怎麼能在這裏應用這個?

回答

1

這是一個複雜的話題,但基於我非常有限調查:

  • 有些數據庫支持UTF-8,默認爲UTF-8和實施支持的一些重音字符的方式upper時尚。我覺得Postgres的屬於這一類
  • 紅寶石,甚至爲2.0,不支持重音字符爲String在任何upcase或downcase

最棘手的似乎是人物之間的大/小寫關係的變化區域設置爲區域設置(例如,根據區域設置,相同的小寫字符可映射到不同的大寫字符)。

在任何情況下,當我看到了UnicodeUtils寶石參考,下面我的機器上工作了您提供的簡單的例子:

Person.where("upper(name) = ?", name.mb_chars.upcase) 

mb_chars方法是由Rails的加入String

+0

完美的答案。謝謝。 – tostasqb

0

在您的config/database.yaml文件中是否爲encoding: utf8?這可能會解決問題。

+0

它在控制器的頂部... – tostasqb