2012-10-11 82 views
3

我想匹配以/company/開頭的所有網址,所以我有這樣的路線:Rails的路由約束不工作

match '/*id' => 'high_voltage/pages#show', :constraints => { id: /^company\/.*/ } 

但是約束沒有做任何事情。網址/abc也符合此路線,並且PagesController會引發錯誤。

我應該如何指定?

我需要id參數在開始時包含company/,所以請不要說只做路由match '/company/*id'。這將給控制器一個id參數沒有company/

UPDATE:我沒有嘗試上述正則表達式在正常Ruby和它的作品。我也試過沒有在公司面前(雖然我確實需要公司是第一個字),但沒有運氣。

更新2:看來問題是通配符,支持通配符路線與約束工作?當路由中存在通配符時,我無法獲得任何約束條件。

更新3:原來這是一個簡單的bug in Ruby on Rails

+0

爲什麼id參數需要'/ company'在裏面? –

+0

@RyanBigg - 理由id需要'公司'(沒有/在前面)就是thinkbot的高壓寶石的工作原理。該ID需要完整的路徑。 –

+0

一個(潛在的)問題是您無法將您的正則表達式固定在路由約束中。 Rails *在遇到'^'時應該給你一個錯誤。說實話?在考慮高電壓後,我會拋出這個寶石。它對你做的*很少,以至於不值得銷燬你的路由表來使它工作。 Rails已經使靜態頁面變得非常簡單。 – meagar

回答

2

正如更新指出,這是Rails的一個bug。

-2

看起來像一個語法錯誤。嘗試使用:constraints => {:id => /^company/.*/}

編輯:我只是認爲紅寶石v 1.9.2

+4

你認爲ruby 1.9.2語法是一個錯誤嗎? – apneadiving