【问题标题】:How to generate a unique random id for post in Ruby on Rails 4?如何在 Ruby on Rails 4 中为 post 生成唯一的随机 id?
【发布时间】:2016-03-26 11:15:23
【问题描述】:

我想为我的博客应用程序中的帖子生成唯一的帖子标识符。

目前我正在使用 SecureRandom.hex(10) 为我的博客网站生成唯一的帖子标识符,但我不确定 SecureRandom 是否安全。

还有其他方法吗?

【问题讨论】:

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


    【解决方案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)”
    猜你喜欢
    • 1970-01-01
    • 2020-12-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-29
    • 1970-01-01
    • 2019-04-29
    • 2017-12-20
    相关资源
    最近更新 更多