Автогенерация id когда id primary key строка?

Добрый день, вопрос такой, как лучше сделать автогенерацию id когда это строка?

миграция:
def change
    create_table :names, id: false do |t|
      t.string :id, limit: 21, null: false
      ...
    end
    add_index :names, :id, unique: true
end


В моделе соответсвенно:
class Name < ActiveRecord::Base
  self.primary_key = :id
  before_create :set_id

private
  def set_id
    if self.id.blank?
      for attemps in 0..3
        self.id = generate_id
        return if Name.find_by(id: self.id).nil?
      end
    end
  end
end

Функция generate_id генерирует случайный строковой id длинной 21 символ с помощью SecureRandom.

Очевидно, что это решение может упасть с исключением если одновременно будет сгенерирован одинаковый id, или если количества попыток будет недостаточно. Всвязи с этим вопрос: как сделать что бы было надежно? Я понимаю, что вероятность того что это мое решение даст сбой ничтожно мала, но тем не менее интересно какой путь правильный.

Прочитал статью:
ruby-journal.com/how-to-override-default-primary-k...
Там автор рекомендует не делать execute %Q{ ALTER TABLE "products" ADD PRIMARY KEY ("sku"); }
  • Вопрос задан
  • 199 просмотров
Пригласить эксперта
Ответы на вопрос 1
rutaka_n
@rutaka_n
softwere engineer
Не совсем понимаю зачем делать id строкой, но если нужно просто уникальное строковое значение, то можно использовать uuid
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы