如何让根域接受字母数字参数而不会发生路由冲突?

时间:2014-06-29 10:52:50

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

我想让我的根控制器接受应用程序生成的一个简短的字母数字参数:

mysite.com/5g3fj6

我如何以参数不与其他路线(如mysite.com/signup)冲突的方式实现此目的

与此同时,我希望避免添加中间词“/ i /”,这会使域名和参数更难为用户输入:

mysite.com/i/5g3fj6

1 个答案:

答案 0 :(得分:0)

您可以尝试使用路线约束。示例:如果您正在使用设计登录/注册内容,请确保设计相关的声明位于routes.rb文件的顶部:

# config/routes.rb

devise_scope :user do
  get 'signup', :to => 'devise/registrations#new'
end 

# this will redirect any request matching the expected URL format.
get '/:the_id', constraints: { the_id: /[a-z0-9]{6}/ }, to: 'posts#show'

上面的路线会链接请求,例如' mysite.com/5g3fj6' to action:在PostsController中显示。日志将显示如下内容:

Started GET "/5g3fj6" for 127.0.0.1 at 2014-06-30 00:27:10 +0800
Processing by PostsController#show as HTML
  Parameters: {"the_id"=>"5g3fj6"} 

您现在可以使用' the_id'里面的表演'做类似" Post.find_by_slug(params [:the_id])"的方法。

希望有所帮助。 :)

干杯!