【问题标题】:Rails plugin for generating unique links?用于生成唯一链接的 Rails 插件?
【发布时间】:2010-03-26 08:31:51
【问题描述】:

我的应用程序中有很多地方需要生成带有唯一标记的链接(foo.com/g6Ce7sDygw 或其他)。每个链接都可能与一些会话数据相关联,并将用户带到一些特定的控制器/操作。

有谁知道这样做的 gem/plugin 吗?它很容易实现,但无需为每个应用程序从头开始编写它会更简洁。

【问题讨论】:

    标签: ruby-on-rails ruby plugins tokenize


    【解决方案1】:

    我需要同样的想法,你需要并且我自己实现了它。我不知道有什么插件可以满足您的需求。正如您所写,实现它并不是那么困难。这是我的解决方案:

    1. 因为我不想使用 UUID(因为它是用十六进制编码的)。我想要一些带有大小字母的随机字母数字。我将此方法添加到 String 类:

      def String.random_alphanumeric(size=20)
        s = ""
       size.times { s << (i = Kernel.rand(62); i += ((i < 10) ? 48 : ((i < 36) ? 55 : 61 ))).chr }
        s
      end
      

      你可以用它创建唯一的链接:

      link = String.random_alphanumeric
      

      作为参数,您可以设置所需字符串的大小。

    2. 另一个重要的事情是在 db 中搜索这个字符串。我使用 mysql,默认情况下它不区分大小写,所以我在我的 UniqueLink 模型中添加了搜索方法:

      def self.find_uid(search_for)
        find_by_sql("SELECT * FROM workshop_application_unique_ids where uid = '#{search_for}' COLLATE utf8_bin ORDER BY created_at DESC").first
      end
      

    希望对你有帮助!

    【讨论】:

    • 不错。通过使用更多不同的字符更“紧凑”。
    • 这怎么比使用 uuidtools 简单?
    • @mplacona:我不知道它是否比使用 uuid 更简单或更复杂。这是不同的。对我来说更好,因为我想使用字符:a-z A-Z 0-9,而不仅仅是 uuid 中的十六进制数字。由于有问题有示例foo.com/g6Ce7sDygw 我认为它会比uuid 更好。添加这个random_alphanumeric 方法就像安装另一个gem 一样简单。
    猜你喜欢
    • 2014-01-19
    • 2017-09-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多