2012-08-07 39 views
0

我的导轨应用程序中有Level记录,它包含1个可包含带有重音符的字符的字段(名称)。无法在导轨中选择带有口音的列

1.9.3p125 :008 > Level.all 
Level Load (0.4ms) SELECT "levels".* FROM "levels" 
=> [#<Level id: 1, name: "Débutant">, #<Level id: 2, name: "Intermédiaire">, #<Level id: 3, name: "Avancé">] 

但是,当我询问,我有:

1.9.3p125 :011 > Level.where("name = ?", "D\U+FFC3\U+FFA9butant").first 
Level Load (0.3ms) SELECT "levels".* FROM "levels" WHERE (name = 'Dbutant') LIMIT 1 
=> nil 

使用rails cé直接由\U+FFC3\U+FFA9更换时我不能键入Level.where("name = ?", "Débutant").first。但在我的控制器中,结果是一样的,我无法查询加重的字符串。

我目前使用sqlite进行测试。

+1

可能是一个编码问题。你是否将应用程序和数据库定义为utf-8? – Nibbler 2012-08-07 06:43:52

+0

我认为数据库应该没问题,因为Level.all返回正确的数据,Level.where只有在重音出现时才能过滤。谢谢,你是对的,我会检查应用程序。 – Luc 2012-08-07 07:31:51

+0

config.encoding在application.rb中正确设置为utf8。我在dabadase.yml中添加了“encoding:utf8”,但仍然是同样的问题。 – Luc 2012-08-07 07:35:26

回答

0

将这个字符串

#encoding: utf-8 

到你的Ruby文件的第一行。

1

您在控制台中的问题与readline库有关:您必须安装正确的readline支持的Ruby。

如果您已经使用RVM安装Ruby的,解决这个问题的最快方法是:

rvm pkg install readline 

,然后(假设你正在使用1.9.3,否则只是你的Ruby版本替换):

rvm reinstall 1.9.3 --with-readline-dir=$rvm_path/usr 

之后,键入Rails的控制台应该再工作é ...

关于你提到的其他问题(在控制器):您能否发布包含正在创建的SQL查询的日志摘录?

+0

在development.log我有这样的:水平加载(0.1ms)选择“水平”。*从“水平”在哪里“水平”。“名称”='Débutant'极限1 – Luc 2012-08-08 11:43:49

+0

因此,查询看起来是正确的...你试图直接看看数据库中的数据吗?如果您使用的是MySQL,您可以在OSX上使用http://www.sequelpro.com/或在Windows上使用http://www.heidisql.com/。 – severin 2012-08-08 14:17:29