2011-05-19 55 views
1

之间我想匹配的网址类似Rails的路线匹配

http://example.com/this.is.my.full.hostname/something/else 

显然当我通过帕拉姆在routes.rb中文件时,它不承认这个参数全名多期

我的代码表示以下

match '/:computer_hostname/somethingelse' => 'test#info' 

任何想法是实现我上面想要的URL的正确方法?或者甚至有可能?我知道URL中的字符是允许的字符,但是它允许多个字符吗?

+0

你想它总是:

match ':hostname/something/else' => 'test#info', :constraints => {:hostname => /[A-Za-z0-9\._\-]+/} 

如果你正在做的多场比赛都具有相同的:hostname段,那么您可以在一个限制的方法调用它们包装看起来完全像这样?或者它也可以看起来像这样?通过'http:// example.com/this.is.my.full.hostname /事/其他/和/这/和/ that'? – Dex 2011-05-20 00:28:42

+0

@Dex是否重要?我认为问题是,我需要设置:computer_hostname =>“一些正则表达式” – Jonathan 2011-05-20 00:42:16

+0

它可能很重要,因为它可能会使正则表达式更加复杂 – Dex 2011-05-20 00:47:48

回答

2

我认为constraints方法/选项会帮助你。你可以试试下面的:

constraints(:hostname => /[A-Za-z0-9\._\-]+/) do 
    match ':hostname/something/else' => 'test#info' 
    match ':hostname/foo/bar'  => 'test#foo' 
end 
+0

不要忘记丢失的括号。不用匹配'/ something/else',你也可以使用glob操作符并将其改为'match':hostname/* something_else'',这会将其余部分存储到'params [:something_else] – Dex 2011-05-20 01:06:15