0

特殊文字が含まれている場合、データベースのフィールドに文字列を保存すると、奇妙な動作が見られます。この例では「á」または「\xE1」

したがって、フィールドが「TESTá」の場合、保存時に保持されるフィールドは「TEST」です。

さらに心配なのは、フィールドが必須として検証されている場合です。そして、「á」に設定すると、検証はパスしますが、保存時に空の文字列が保存されます。永続化されたレコードを無効にしています!

私のデータベースのエンコーディングは UTF-8 なので、これはエンコーディングの問題だと思います。

実際、コンソールで簡単なテストを試みると、次のエラーが発生します。

» "TEST\xE1F".encode('UTF-8')
Encoding::UndefinedConversionError: "\xE1" ASCII-8BIT から UTF-8 へ

では、レール/アクティブレコードで特殊文字を正しく永続化するにはどうすればよいですか?

助けてくれてありがとう。

4

1 に答える 1

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
于 2012-09-07T10:30:51.747 に答える