Я написал приложение на ruby 1.9.3 / rails 3.1.0, которое работает с mysql в качестве базы данных и utf8 в качестве кодировки для всего.Теперь я должен записать некоторые данные этого нового приложения также в унаследованную базу данных, которая использует latin1 в качестве кодировки.Это мои настройки базы данных
# database.yml
development:
adapter: sqlite3
encoding: utf8
production:
adapter: mysql2
encoding: utf8
# other params
legacy:
adapter: mysql2
encoding: latin1
И это (упрощенная версия) моих моделей
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
Когда я вызываю метод legacy_save для объекта Message, могут произойти две вещи:сообщение сохраняется правильно, если оно содержит только символы ascii или возникает исключение, если оно содержит символы не ascii.Я пытаюсь заставить этот код работать, но безуспешно.
Исключение, которое я получил, это
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
Есть подсказка?