Ruby on rails 使用简单正则表达式';不匹配

Ruby on rails 使用简单正则表达式';不匹配,ruby-on-rails,regex,routes,Ruby On Rails,Regex,Routes,我在网上浏览了一段时间,但我没法让它工作。我们的应用程序必须使用像ourapp.com/meandyou这样的URL,其中公共元素是参数中的“and”。 我发现可以使用正则表达式约束URL参数,所以我将规则添加到routes.rb,但没有成功。如果我尝试使用终端匹配同一个表达式,它会起作用。以下是完整的路由文件: Railroot::Application.routes.draw do resources :couples get "home/index" root :to =&

我在网上浏览了一段时间,但我没法让它工作。我们的应用程序必须使用像ourapp.com/meandyou这样的URL,其中公共元素是参数中的“and”。 我发现可以使用正则表达式约束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

提前感谢您的帮助

这应该是你的出发点:


这可能是您的答案,来自:

:constraints接受正则表达式,但限制不能使用regexp锚。[...] 但是,请注意,您不需要使用锚定,因为所有管线都锚定在起点

因此,我认为您实际匹配的不是
/和/
,而是
/^和/
,这可以解释为什么它不起作用

尝试更明确一些,如下所示:

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

谢谢你的回复欧米茄。不幸的是仍然没有快乐。我的routes.rb现在看起来和你写的一模一样,但我一直得到“No route matches[GET]”/meandyou“”。目前,我正在使用一个“全面覆盖”的路线,并使用它来触发show_url操作,但我知道这不是很优雅。谢谢你的回复,很抱歉我回来晚了。我尝试了这个新的表达式,但仍然不起作用:(@shioyama-answer对我来说很有效,但我会在正则表达式中使用/[^\/]+和+/
match ':url' => 'couples#show_url', :url => /.*and/