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