我不希望看到我的帖子页面显示为/posts/1
等等,而是希望有一个随机字符串,更像是/posts/299432
。我做了一些研究,并在S.O。
How to make model IDs in Rails unpredictable and random
它确实有用,但我不认为它为帖子创建了一个唯一的ID,因此我认为帖子的ID很可能会重复。
我的问题是该方法会创建使用的唯一字符串吗?或者我应该做些不同的事情来为我的帖子生成这些独特的随机ID?
由于
答案 0 :(得分:3)
这是一种更好的方法。您可以使用Hashids。
答案 1 :(得分:2)
是的,它会创建一个唯一的ID。从最高投票的答案:
while Model.where(:id => self.id).exists?
意味着它将继续生成一个新的随机数,直到找到一个尚未存在的随机数。 (这很可能是第一次。)
答案 2 :(得分:2)
一些选项:
从任意选择的初始数字开始,如299432,每次递增一次。
生成随机的6位数字,并检查您的数据库以查看该数字是否已被使用;如果有,则生成另一个随机数并重复。
使用GUID(您可以编码为base64,或者您喜欢)。
如果选项1因为生成顺序值而不可接受,则每次可以增加 N 而不是1,然后将模数对 M 。只要 N 和 M 是相对素数,序列就会生成 M 唯一数字。 (您还可以添加偏移量以使数字变大。)换句话说,生成( a +( i * N ))( mod M ) N 和 M 相对素数。如果你有超过 M 的帖子,这种方法显然会失败。