我正在尝试在rails中创建一个唯一的数字永久链接。我的问题是我需要确保它是唯一的,有5到7个数字并且是随机生成的(因此不是简单地计算)。我确实看过FriendlyID,但我不确定这是否可以提供我需要的东西 - 我的永久链接的网址最终应该是这样的:
www.kreelu.com/4325677
是否有内置功能或gem可以提供此功能?
谢谢!
答案 0 :(得分:1)
after_validation :set_permalink
def rand_permalink #you can find a better way to exclude loop db-searches
r = rand.to_s[2..8] # 7-digit random, you can make [2..11] for 10-digits and so on
while find_by_permalink(r).present?
r = rand.to_s[2..8]
end
r
end
def set_permalink
permalink = rand_permalink unless permalink.presence
end
答案 1 :(得分:1)
假设您要在create上创建唯一的permalink
,您希望将其存储在数据库中,并将该类命名为Post
:
validate :permalink, :uniqueness => true
before_create :create_permalink
private
def create_permalink
loop do
self.permalink = Array(1..7).map{ rand(10).to_s }.join
return if Posts.where(permalink: permalink).blank?
end
end