вы можете добавить метод before_save, который преобразует ваш текст в соответствующие символы UTF-8. если у вас есть только 1 поле, которое может содержать символы не-UTF8, тогда все просто, если у вас много полей, было бы лучше, если бы вы динамически перебирали измененные текстовые / строковые поля и исправляли проблему UTF-8. В любом случае вам нужно использовать String # encode . Вот пример
before_save :fix_utf8_encoding
def fix_utf8_encoding
columns = self.class.columns.select{|col| [:text,:string].include?(col.type)}.map{|col| col.name.to_sym}
columns.each do |col|
self[col] = self.self[col].encode('UTF-8', :invalid => :replace, :undef => :replace) if self[col].kind_of?(String) #Double checking just in case.
end
end
private :fix_utf8_encoding
А для бонусных баллов вы также можете проверить, было ли изменено поле с помощью измененных рельсов? помощники, прежде чем это исправить.