0

当字符串包含特殊字符时,将字符串保存到数据库中的字段时出现奇怪行为。在这个例子中,“á”或“\ xE1”当包含特殊字符时截断活动记录字段

因此,如果该字段是“TESTA”,则保存时保存的字段为“TEST”。

更令人担忧的是,如果该字段被验证为强制性的。我将它设置为“á”,验证通过,但保存空字符串会被保存。使持续记录无效!

我的数据库编码是UTF-8,所以我认为这是一个编码问题。

事实上,如果在控制台上我尝试一个简单的测试,我得到这个错误:

» “TEST \ xE1F” .encode( 'UTF-8')
编码:: UndefinedConversionError: “\ XE1”从ASCII-8BIT到UTF-8

那么,我应该如何正确地在rails/active record中保留特殊字符呢?

感谢您的任何帮助。

回答

0

编码类型添加到乌尔迁移

# encoding: utf-8 
class SetDefaultValues < ActiveRecord::Migration 
    def up 
    change_column_default(:dimensions, :unit_of_measure, "inch") 
    change_column_default(:gdnts, :unit_for_tolerance, "µinch") 
    end 
end 

也在模型中。

# encoding: utf-8 
class Specifications::Specification < ActiveRecord::Base 
    ... 
end 
+0

如何在模型中设置编码? – Chris

+0

我仍然收到相同的错误。在您的导航控制台中,“\ xe1”.encode('UTF-8')是否会产生错误? – Chris

+0

将其添加到您的控制器和其他使用该特殊字符的文件中。它不会给我任何控制台上的错误。结帐 http://stackoverflow.com/questions/7699018/in-ruby-on-rails-are-encoding-utf-8-and-config-encoding-utf-8-differe