如何在 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 中为帖子添加标签

如何在 ruby​​ on rails 4 中创建高级搜索

Ruby on Rails 4,在视图中形成

Ruby on Rails 5.1 和 Vue.js 2.4.x – 使用 Karma、Jasmine 进行测试 – 如何安装?

ruby on rails - 问题捆绑安装nokogiri 1.7.2 on ruby on rails 4.x.

如果 Ruby on Rails 中有设置限制,如何显示特定的 div 元素