2010-10-04 44 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