我在我的rails应用程序中有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
我在使用Level.where("name = ?", "Débutant").first
时无法输入rails c
,因为é
被\U+FFC3\U+FFA9
直接替换。但是在我的控制器中,结果是一样的,我无法查询突出的字符串。
我目前使用sqlite进行测试。
答案 0 :(得分: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查询的日志摘录?
答案 1 :(得分:0)
放置此字符串
#encoding: utf-8
到你的Ruby文件的第一行。