2013-10-07 62 views
2

我採用了棱角分明html5mode所以有Rails的路由設置重定向所有失敗的請求根Rails的捕獲所有路線,不包括資源和HTML

# Angular catch all to allow page refresh 
get '*page' => "home#index" 

這一切正常,當角模塊請求缺少模板除外(例如/assets/templates/page.html),當它導致無盡的循環

我怎麼能告訴Rails捕捉所有路線,東西在/資產?

回答

1

的路由進行評估從上到下,這樣你就可以做到以下幾點:

# Catch all missing templates 
get '/assets/templates/*page' => '/assets/templates/default.html' 

# Angular catch all to allow page refresh 
get '*page' => "home#index" 

缺少的模板將通過的第一條語句被捕獲和所有其他丟失的路由將通過第二條語句被抓

6

我注意到這是相當古老的,但通過谷歌發現它,並不滿意這裏唯一的答案。自從我通過這個工作以後,我會分享我的解決方案。

使用格式參數路線

get "/*path" => "home#index", format: false 

因此它會忽略任何格式的請求只需禁用通配符路徑的格式選項(如CSS,JS,PNG ...)


使用約束在路由

get "/*path" => "home#index", constraints: -> (req) { !(req.fullpath =~ /^\/assets\/.*/) } 

指定用一個簡單的拉姆達檢查你的路徑值,而不是最好的正則表達式,但給出了這個概念我要爲這裏的約束選項...




我個人使用在我的應用程序中的格式參數,約束選項還可以讓你傳入一個對象,查看導軌指南瞭解更多信息 - >http://guides.rubyonrails.org/routing.html#advanced-constraints