2012-07-21 21 views
0

我在網上看了一段時間,但我無法得到它的工作。我們的應用程序必須與像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 

,我讀了滑軌內嵌套一個更大的匹配路由時一個表達式,所以也許我做的事情,即使對於這樣一個簡單的表達稍有不妥。

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

在此先感謝您的幫助!

回答

0

這應該是你的出發點:

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

感謝您的答覆歐米茄。很遺憾,仍然沒有喜樂我的routes.rb現在看起來和你寫它的方式完全一樣,但我一直得到「沒有路由匹配[GET]」/ meandyou「」。目前我正在使用「全部捕捉」路線並使用它來觸發show_url動作,但我知道這不是很優雅。 – 2012-07-24 18:18:38

0

這可能是你的答案,從rails routing docs

:約束需要正則表達式其限制條件爲正則表達式錨不能使用。 [...] 但是,請注意,您不需要使用錨點,因爲所有路線都在開始時錨定。

所以我認爲你實際上匹配的不是/and/而是/^and/,這將解釋爲什麼它不起作用。

嘗試更加明確,如:

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

感謝您的回覆,並很抱歉遲到回到你身邊。我嘗試了這個新的表達,但仍然沒有工作:(。 – 2012-08-18 14:41:18

+0

@shioyama答案適合我,但我會用/[^\/]+and.+/磨練正則表達式 – Krut 2012-12-07 07:41:23