Rails 3: сравнить уникальные коды - PullRequest
0 голосов
/ 05 января 2011

Какой лучший способ гарантировать уникальность кода?Код XXX-XXXXX, где X - только число.

Каким образом, кроме поиска кода в таблице базы данных, можно сделать процесс быстрее и чище?

С уважением.

Ответы [ 3 ]

5 голосов
/ 05 января 2011
  1. Нормальным подходом является использование :uniqueness проверки.Это обрабатывает поиск в БД.
  2. Более пуленепробиваемым является использование 1) + уникальный индекс в этом поле.Если сохранение завершится неудачно без ошибок проверки, вы можете сгенерировать новый код и повторить попытку.
0 голосов
/ 06 января 2011

Хэш, основанный на времени, на самом деле не «гарантирован», чтобы быть уникальным.Использование некоторого типа хэша - это просто способ создать дайджест из больших исходных данных.Поскольку все данные затем могут быть описаны в 128 битах (с использованием md5), то возможно столкновение с хеш-коллизиями.

Команда validates: uniquness выполнит запрос, чтобы определить, использовалось ли ранее значение поля.Вы можете использовать это, но это не должно быть вашим единственным решением.Если поле предназначено быть уникальным, вы должны поместить уникальный индекс в столбец в базе данных.Если вы полагаетесь только на проверку рельсов, вы рискуете получить состояние гонки при вставке данных в таблицу.Я могу обойти проверку, но другая запись могла бы также пройти проверку, и оба оказались бы в таблице.

Вы генерируете значение или это ввод пользователя?

0 голосов
/ 05 января 2011

Поскольку не существует двух одинаковых времен, использование какого-либо хэша, основанного на времени, является самым простым способом гарантировать уникальность. Если вы храните xxx-xxxx, вы ограничиваете себя. Вы также можете использовать уникальное автоинкрементное значение. Сохраните значение на стороне сервера для следующего назначаемого номера, а затем увеличивайте его всякий раз, когда вы вводите новый уникальный идентификатор.

оба являются приемлемыми вариантами, не зная дополнительной информации

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...