使用简单正则表达式的轨道路由不匹配

时间:2012-07-21 16:23:45

标签: ruby-on-rails regex routes

我在网上看了一会儿,但我无法让它发挥作用。我们的应用程序必须与ourapp.com/meandyou等网址一起使用,其中公共元素是参数中的“和”。 我看到可以使用正则表达式约束url参数,所以我将规则添加到routes.rb,但没有成功。如果我尝试使用终端匹配相同的表达式,它可以工作。这是完整的路径文件:

Railroot::Application.routes.draw do
  resources :couples

  get "home/index"

  root :to => 'home#index'

  match ':url' => 'couples#show_url', :url => /and/
end

我读到Rails在匹配路径时将表达式嵌入到更大的表达式中,所以即使对于这样一个简单的表达式,我也许会做一些稍微错误的事情。

我在Ubuntu 10.04,Ruby 1.9.3,Rails 3.2.3,Passenger 3.0.13,Nginx 1.2.1上运行。

提前感谢您的帮助!

2 个答案:

答案 0 :(得分:0)

这应该是你的出发点:

Railroot::Application.routes.draw do
  root :to => 'home#index'
  resources :couples
  match ':url' => 'couples#show_url', :constraints => { :url => /and/ }
end

答案 1 :(得分:0)

这可能是您的答案,来自rails routing docs

  

:约束采用正则表达式,但不能使用regexp锚点。 [...]   但请注意,您不需要使用锚点,因为所有路径都在开始时锚定。

所以我认为你实际匹配的不是/and/而是/^and/,这可以解释为什么它不起作用。

尝试更明确,如下:

match ':url' => 'couples#show_url', :url => /.*and/