我正在尝试使用一种算法来为我的 rails 应用程序中的模型生成唯一的非顺序标记。
例如:
MyModel.create.token #=> '183685'
MyModel.create.token #=> '456873'
MyModel.create.token #=> '813870'
我能想到的唯一方法是创建一个随机的东西,检查冲突,然后重试。对我来说,这似乎是一种很臭的代码,以某种力量的方式。
class MyModel < ActiveRecord::Base
before_create :set_token
def set_token
existing_model_count = nil
# Loop while we have a token that already belongs to an existing model.
while existing_model_count.nil? || existing_model_count > 0
random_token = TokenGenerator.random_token
existing_model_count = MyModel.where(token: random_token).count
end
# Loop exited, meaning we found an unused token.
self.token = random_token
end
end
有没有更好的方法来做到这一点,它不涉及while
将迭代未知次数的循环?
虽然这里的示例是 ruby,但这是一种适用于任何语言的通用算法问题,因此欢迎使用其他语言的解决方案。