如何让我的Rails 3.1应用程序接受URL中带有“@”符号的路由?

时间:2011-09-13 10:05:49

标签: ruby-on-rails ruby-on-rails-3 ruby-on-rails-3.1

我已经通过Vanity gem设置路径文件以包含用户名。

但是,现在我只能做一个特定的网址 - 即用户名。

因此gem生成的路径如下所示:

  controller :vanities do 
    match ':vname' => :show, :via => :get, :constraints => {:vname => /[A-Za-z0-9\-\+]+/}
  end

所以说有人使用用户名test注册,系统会根据用户名自动创建vname。但如果他们前往mydomain.com/@test会发生什么,我希望他们最终走在同一条路线上,就好像他们只是前往/test一样。

我该怎么做?

2 个答案:

答案 0 :(得分:1)

您可以在虚名称的开头使用可选的@:

controller :vanities do 
  match ':vname' => :show, :via => :get, :constraints => {:vname => /@?[A-Za-z0-9\-\+]+/}
end

然后您必须在控制器操作中删除@,如下所示:

params[:vname].gsub!(/\A@/, '')

<强>更新

如果您希望在所有控制器中完成替换,可以在before_filter的{​​{1}}中执行此操作:

ApplicationController

答案 1 :(得分:0)

@符号是URL中的保留字符,在特定上下文%40之外使用时,必须进行百分比编码(@)。网址mydomain/@test无效。