Решение Rails - это before_save
hook. Вы также можете сделать это с помощью триггера базы данных, но это намного более грязно и хрупко.
SHA256, вероятно, здесь хорошо, так как он основан на SHA2. Вероятность столкновения должна быть исчезающе мала.
Использование хеша согласованной длины вместо текста для уникального индекса на самом деле является отличной идеей, поскольку индексы MySQL увеличиваются для более длинных строк. Короткая шестнадцатеричная строка намного легче обрабатывается механизмом индексирования и все же обеспечивает требуемое ограничение уникальности.
Уникальные ограничения MySQL на самом деле также предоставляют механизм упорядочения, и это является источником боли, но если вы не заинтересованы в упорядочивании хеш-решения, это отличная альтернатива.