【发布时间】:2010-03-26 08:31:51
【问题描述】:
我的应用程序中有很多地方需要生成带有唯一标记的链接(foo.com/g6Ce7sDygw 或其他)。每个链接都可能与一些会话数据相关联,并将用户带到一些特定的控制器/操作。
有谁知道这样做的 gem/plugin 吗?它很容易实现,但无需为每个应用程序从头开始编写它会更简洁。
【问题讨论】:
标签: ruby-on-rails ruby plugins tokenize
我的应用程序中有很多地方需要生成带有唯一标记的链接(foo.com/g6Ce7sDygw 或其他)。每个链接都可能与一些会话数据相关联,并将用户带到一些特定的控制器/操作。
有谁知道这样做的 gem/plugin 吗?它很容易实现,但无需为每个应用程序从头开始编写它会更简洁。
【问题讨论】:
标签: ruby-on-rails ruby plugins tokenize
我需要同样的想法,你需要并且我自己实现了它。我不知道有什么插件可以满足您的需求。正如您所写,实现它并不是那么困难。这是我的解决方案:
因为我不想使用 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
作为参数,您可以设置所需字符串的大小。
另一个重要的事情是在 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
希望对你有帮助!
【讨论】:
foo.com/g6Ce7sDygw 我认为它会比uuid 更好。添加这个random_alphanumeric 方法就像安装另一个gem 一样简单。