ActiveRecord查询失败包含重音字符的名称

时间:2013-09-18 12:14:26

标签: ruby-on-rails-3 postgresql activerecord unicode special-characters

我有一个使用Postgres的Rails应用程序。我的Document模型具有name属性。某些名称包含重音字符。几个示例名称:

  

CondiçõesParaAplicaçãoDaLei

     

考虑到Introdutórias

我正在查询具有特定名称的模型:

document = Document.where(name: "Example Document Name").first

只要名称不包含特殊字符,这样就可以了,但是只要我使用包含任何重音字符的名称,查询就会返回nil。

$ Document.all
$ #<Document id: 1, name: "Foo" ... >
$ #<Document id: 1, name: "Considerações Introdutórias" ... >
$ Document.where(name: "Foo").first
$ #<Document id: 1, name: "Foo" ... > 
$ Document.where(name: "Considerações Introdutórias").first
$ # nil

当名称包含特殊字符时,为什么此查询失败?

在我的config/application.rb

config.encoding = "utf-8"

在我的`config / database.yml'中:

encoding: utf8

2 个答案:

答案 0 :(得分:1)

检查你的配置。  config.encoding = "utf-8"

在database.yml中查看encoding: utf8

查看这些问题

Add "# coding: utf-8" to all files

Set global default encoding for ruby 1.9

答案 1 :(得分:1)

原来问题不在于Rails,而在于OSX。有不同的方式来表示相同的字符;要么作为单个符号,要么分解为多个组件。两个版本在终端中显示相同,但​​将名称复制到纯文本文件中,您将看到差异:

组成:

Considerações Introdutórias

分解(我只能通过在分解的字符周围添加空格来获取要在此处显示的分解版本)

Condic ̧ o ̃ es Para Aplicac ̧ a ̃ o Da Lei

为了解决不匹配问题,我使用Unicode Utils编写文件名,然后再将它们添加到数据库中,然后再使用它们进行搜索:

require "unicode_utils/nfc"

...

filename = UnicodeUtils.nfc(filename)