ruby 1.9.3/rails 3.1.0でアプリケーションを作成しました。 mysqlをデータベースとして、utf8をすべてのエンコーディングとして使用します。今では、この新しいアプリケーションのいくつかのデータを、latin1をエンコーディングとして使用するレガシーデータベースにも書き込む必要があります。これは私のデータベースのセットアップRuby 1.9で異なるエンコーディングでデータを移動する: "Encoding :: CompatibilityError:互換性のない文字エンコーディング:UTF-8とISO-8859-1"
# database.yml
development:
adapter: sqlite3
encoding: utf8
production:
adapter: mysql2
encoding: utf8
# other params
legacy:
adapter: mysql2
encoding: latin1
であり、これらは私のモデル(のsemplifiedバージョン)です
class Message < ActiveRecord::Base
attr_accessible :title, :content
def legacy_save
LegacyMessage.create!(title: title, content: content)
end
end
class LegacyMessage < ActiveRecord::Base
estabilish_connection 'legacy' # actually I'm using octopus gem to do this connection
end
私はMessageオブジェクトにlegacy_saveメソッドを呼び出すと二つのことがhappernすることができます:メッセージが正しく保存されますそれがアスキー文字だけを含む場合、またはアスキー文字以外の文字が含まれている場合は例外が発生します。私はこのコードを稼働させようとしていますが、運がありません。
私が得た例外は、私は次のコードのように、文字列クラスのencode方法を試してみた
Encoding::CompatibilityError: incompatible character encodings: UTF-8 and ISO-8859-1
ですが、運を持ちます。
def legacy_save
LegacyMessage.create!(title: title.encode('ISO-8859-1'),
content: content.encode('ISO-8859-1')
)
end
ヒント?