将随机URL分配给rails 3中的资源

时间:2011-04-14 23:03:03

标签: ruby-on-rails-3 random url-routing

我需要为我的Topic模型生成一个随机网址(例如):

  

http://localhost:3000/9ARb123

那我怎么能在rails中做到这一点?

注意:随机字符串必须包含数字,小写和大写字母。

提前感谢。

2 个答案:

答案 0 :(得分:3)

这样的事可能

#config/routes.rb
match "/:random_id" => "topics#show", :constraints => {:random_id => /([a-zA-Z]|\d){3,6}/}

将随机字符串3-6个随机字母/数字匹配到您的主题控制器的show方法。确保在此匹配器上方声明其他资源,例如“http:// localhost:3000 / pies”将路由到Topics#show而不是Pies #index。

要为您的主题生成随机网址,您可以执行以下操作:

#app/models/topic.rb
before_create :generate_random_id

def generate_random_id
   #generates a random hex string of length 6
   random_id = SecureRandom.hex(3)
end 

答案 1 :(得分:0)

Patricks答案应该有效 - 但它只涵盖路由传入的请求。 如果您仍在使用标准路线(例如topic_path)来创建链接,它仍将使用正常路线。

如果您运行rake路由,您应该看到使用random_id创建的路由的名称。 (您可能需要使用以下命名来命名:as =>'random_route')

如果你打电话给那而不是标准的topic_path,你应该得到你想要的路线