在Rails應用程序中,routes.rb 文件管理着全部用戶從客戶端向服務器發送的請求,該如何轉化?routes.rb經過分析URL,來肯定要調用哪一個控制器的哪一個Action方法。 數據庫
在routes.rb文件中,共列舉了5種主要路由,分別爲默認路由(Default Routes)、資源路由(RESTful Routes)、命名路由(Named Routes)、嵌套路由(Nested Routes)、正則路由(Regular Routes)。下面咱們來一一學習之~~ ruby
顧名思義,默認路由是建立應用時,Rails自動生成的,位於routes.rb文件的最後一行。 服務器
match ':controller(/:action(/:id(.:format)))'
默認路由由’/'分割爲3部分,第一部分解釋爲控制器,第二部分解釋爲Action方法,第三部分變爲相應參數傳遞。 dom
例如,當有」http://domain.com/users/show/1″請求發生時,Rails去請求users控制器的show方法,並將id=1傳遞給show方法。 學習
資源路由是Rails用來描述資源及其狀態的,通俗些,就是用來描述數據庫表/實體的相關數據操做。 url
值的注意的是,資源路由巧妙的使用了HTTP響應,完成了數據庫CRUD操做。例如: spa
resources :users |
這樣就產生了7種不一樣的路由,用來描述User的數據庫操做。以下表所示: code
HTTP響應 | URL | Action方法 | 描述 |
---|---|---|---|
GET | /users | index | 獲取全部user數據 |
GET | /users/new | new | 跳轉到建立user頁面 |
POST | /users | create | 建立新的user |
GET | /users/1 | show | 獲取id=1的user對象 |
GET | /users/1/edit | edit | 編輯id=1的user對象 |
PUT | /users/1 | update | 更新id=1的user對象 |
DELETE | /users/1 | destroy | 刪除id=1的user對象 |
這7中路由完成了資源的全部CRUD操做,與此同時,rails還爲資源生成了一些輔助方法: orm
命名路由能夠爲任意一個肯定的URL定義名稱,該名稱亦可用在控制器方法中,實現頁面提交和重定向。例如: 對象
match 'hello', :to => 'users#index', :as => 'hello'
使用上述代碼後,Rails便知道’hello’須要調用users控制器的index方法。同時,還爲該路由建立了兩個輔助方法:
嵌套路由是用於聲明一個資源包含另外一個關聯資源的訪問方式。例如:博客系統的文章和評論兩個資源就能夠這樣描述,由於評論應依附於文章存在,不該獨立出來。因而便有:
# 直觀的寫法 resources :articles do resources :comments end # 更簡單的寫法 resources :articles, :has_many => :comments
因而,當咱們http://domain.com/articles/1/comments請求資源時,rails會理解爲獲取id=1的那篇文章的全部評論。很直觀,有木有?
正則路由的使用機率較低,但它卻能完成很是嚴謹的路由訪問。它能夠爲每一個可變參數經行正則驗證,只有經過驗證的url,纔會被指定到定義好的控制器方法中去。簡單舉個例子:
match 'users/search/:id/:age', :controller => 'users', :action => 'search', :age => /[2-5][0-9]/
上面的路由只有在age參數傳遞在20-59之間時纔會被匹配,如http://domain.com/users/search/1/25,便會匹配成功;而http://domain.com/users/search/1/60,則不會被匹配。
在Rails中,路由生效的優先級是:從routes.rb文件定義的路由中從上到下依次匹配,最先匹配的路由會生效。也就是說routes.rb文件中的路由優先級從上到下依次下降。
PS:當沒有任何路由匹配到時,Rails會拋出Routing Error異常。
查看當前路由規則時,只需Terminal進入項目目錄,運行下述命令便可:
rake routes