如何在 Ruby on Rails 4 中为 post 生成唯一的随机 id?
Posted
技术标签:
【中文标题】如何在 Ruby on Rails 4 中为 post 生成唯一的随机 id?【英文标题】:How to generate a unique random id for post in Ruby on Rails 4? 【发布时间】:2016-03-26 11:15:23 【问题描述】:我想为我的博客应用程序中的帖子生成唯一的帖子标识符。
目前我正在使用 SecureRandom.hex(10)
为我的博客网站生成唯一的帖子标识符,但我不确定 SecureRandom 是否安全。
还有其他方法吗?
【问题讨论】:
【参考方案1】:如果有人只寻找唯一的数字标记。我宁愿使用基于时间的方法。对于不太频繁的请求(每秒最多一个)。你可以使用
Time.now.to_i
在字符串Time.now.to_i.to_s
中获取它
如果您在生成令牌时处理频繁的请求(每秒数千个)。使用浮动对话
Time.now.to_f #1532415770.0032046
要以字符串形式获取它,您可以使用Time.now.to_f.to_s.gsub(".", "")
,尽管不推荐。
在当前宇宙中,上述值的忏悔机会接近于零。
【讨论】:
这似乎是一个好方法,@Aarvy。但是我很好奇为什么浮动选项比整数选项具有更好的性能?我希望两者都是 O(1)【参考方案2】:来自 Ruby 文档:
这个库是一个安全随机数生成器的接口,适用于在HTTP cookie等中生成会话密钥。
我有类似的问题,我使用了 Digest 库。
Digest::MD5.hexdigest(post.title + post.created_at.to_s) #=> "b4809d..."
【讨论】:
是否有此功能的任何文档,因为我找不到它。如果我使用 SecureRandom 哈希有问题吗? 您可以打开此page 或运行ri Digest
。我觉得用SecureRandom
就好了。
我得到“在您的 Gemfile 中列出的任何 gem 源中找不到 gem 'Digest'。”当我将“摘要”或“摘要”添加到 gemfile 并运行 bundle install
另外,如果我尝试gem install digest
,它会返回“错误:在任何存储库中都找不到有效的 gem 'digest' (>= 0)”以上是关于如何在 Ruby on Rails 4 中为 post 生成唯一的随机 id?的主要内容,如果未能解决你的问题,请参考以下文章
Ruby on Rails 5.1 和 Vue.js 2.4.x – 使用 Karma、Jasmine 进行测试 – 如何安装?