Из того, что я могу понять, это проблема, когда строка, которую вы пытаетесь вставить на свой сервер PostgrSQL, не кодируется с помощью UTF-8. Это несколько странно, потому что ваше Rails-приложение должно быть настроено на использование UTF-8 по умолчанию.
Существует несколько способов исправить это (в порядке, который я рекомендую):
Во-первых, убедитесь, что для config.encoding
установлено значение "utf-8"
в config/application.rb
.
Если вы используете Ruby 1.9, вы можете попытаться форсировать кодировку символов перед вставкой с помощью toutf8
.
Вы можете выяснить, с чем закодирована ваша строка, и вручную установить SET CLIENT_ENCODING TO 'ISO-8859-1';
(или какова бы ни была кодировка) в вашем соединении PostgeSQL перед вставкой строки. Не забудьте сделать RESET CLIENT_ENCODING;
после оператора для сброса кодировки.
Если вы используете Ruby 1.8 (что более вероятно), вы можете использовать библиотеку iconv для преобразования строки в UTF-8. См. Документацию здесь .
Более хакерским решением является переопределение ваших методов получения и установки в модели (то есть content
и content=
), кодирование и декодирование вашей строки с помощью Base64. Это будет выглядеть примерно так:
require 'base64'
class Comment
def content
Base64::decode64(self[:content])
end
def content=(value)
self[:content] = Base64::encode64(value)
end
end