2010-10-04 76 views
1

我在我的Rails 3应用程序中有以下路线。Rails 3扩展正则表达式的路由:约束 - 错误?

post 'games/:id/:task/:card_id' => 'games#perform', :as => :perform 

...允许,显然,这样的要求是button_to("Foo", {card_id=>2, :action=>:perform, :task=>"foo"}),映射到URL /games/1/foo/2

我想限制路线匹配的一组任务。 Rails API docs指示“约束可以包括'ignorecase'和'扩展语法'正则表达式修饰符”。但是,按预期以下工作:

post 'games/:id/:task/:card_id' => 'games#perform', :as => :perform, :constraints => {:task => /(foo|bar)/} 

但以下不:

post 'games/:id/:task/:card_id' => 'games#perform', :as => :perform, :constraints => {:task => /(foo| 
                           bar)/x} 

在后一种情况下,button_to以上链接产生的网址:/games/perform?card_id=2&task=foo

这是一个错误,还是我做错了什么?

回答

1

是的,在Ruby 1.8.x的RegexpWithNamedGroups处理中存在一个错误,因为它以与正则表达式修饰符不兼容的方式伪造了1.9的命名正则表达式组语法。

这里的问题是,随着1.8 Rails使用正则表达式中的括号组的一个简单的索引映射到名字。当您将修饰符添加到正则表达式时,内部会创建一个将索引从1中删除的附加组。

解决方法现在是使用1.9或无修饰符。

+0

好的信息,谢谢。你有链接到错误报告? – Chowlett 2011-04-14 06:07:22

+0

我想确认它仍然是HEAD中的一个错误,现在HEAD没有为我运行。我会添加它。 – smathy 2011-04-14 15:35:45