使我的帖子的ID是随机的(但是唯一的)字符串

时间:2014-02-10 15:10:41

标签: ruby-on-rails ruby-on-rails-4

我不希望看到我的帖子页面显示为/posts/1等等,而是希望有一个随机字符串,更像是/posts/299432。我做了一些研究,并在S.O。

上找到了这个答案

How to make model IDs in Rails unpredictable and random

它确实有用,但我不认为它为帖子创建了一个唯一的ID,因此我认为帖子的ID很可能会重复。

我的问题是该方法会创建使用的唯一字符串吗?或者我应该做些不同的事情来为我的帖子生成这些独特的随机ID?

由于

3 个答案:

答案 0 :(得分:3)

这是一种更好的方法。您可以使用Hashids

答案 1 :(得分:2)

是的,它会创建一个唯一的ID。从最高投票的答案:

while Model.where(:id => self.id).exists?

意味着它将继续生成一个新的随机数,直到找到一个尚未存在的随机数。 (这很可能是第一次。)

答案 2 :(得分:2)

一些选项:

  1. 从任意选择的初始数字开始,如299432,每次递增一次。

  2. 生成随机的6位数字,并检查您的数据库以查看该数字是否已被使用;如果有,则生成另一个随机数并重复。

  3. 使用GUID(您可以编码为base64,或者您喜欢)。

  4. 如果选项1因为生成顺序值而不可接受,则每次可以增加 N 而不是1,然后将模数对 M 。只要 N M 是相对素数,序列就会生成 M 唯一数字。 (您还可以添加偏移量以使数字变大。)换句话说,生成( a +( i * N ))( mod M N M 相对素数。如果你有超过 M 的帖子,这种方法显然会失败。