Rails: исключение «недопустимая последовательность байтов в UTF-8» при настройке ассоциации has_one по UUID - PullRequest
2 голосов
/ 21 февраля 2011

Среда: Ruby 1.9.2, Rails 3.0.1

Две таблицы MySQL: 1. items, 2. voice_counts (каждая строка представляет количество пользователей, проголосовавших за элемент)

Поскольку таблицы большие, и мне нужно их осколить, я использую UUID.Столбец uuid определен в обеих таблицах: uuid varbinary (16) NOT NULL.

Я определил ассоциацию has_one в модели элементов: has_one: voice_count,: foreign_key => "uuid",: primary_key =>«uuid»

Когда я вызываю item.vote_count, я получаю следующее исключение для некоторых значений UUID: «ArgumentError: недопустимая последовательность байтов в UTF-8».

Конечно, необработанный UUIDэто просто последовательность байтов (кодировка: ASCII-8BIT), но когда ActiveRecord создает запрос SQL, он пытается интерпретировать его как строку UTF-8.

Как мне сказать, чтобы он просто передавал байтпоследовательность к MySQL?

1 Ответ

1 голос
/ 27 февраля 2011

Используете ли вы что-то вроде

UUIDTools::UUID.random_create.hexdigest[0, 8]

для генерации UUID?

Мы используем это и присваиваем его строковому полю в наших моделях, используя базы данных mysql и postgres. примечание: мы не используем их в качестве ключей. Так же, как обычные поля в модели.

...