Ruby On Rails 路由配置簡述

一、認識Rails路由配置文件:routes.rb

在Rails應用程序中,routes.rb 文件管理着全部用戶從客戶端向服務器發送的請求,該如何轉化?routes.rb經過分析URL,來肯定要調用哪一個控制器的哪一個Action方法。 數據庫

在routes.rb文件中,共列舉了5種主要路由,分別爲默認路由(Default Routes)、資源路由(RESTful Routes)、命名路由(Named Routes)、嵌套路由(Nested Routes)、正則路由(Regular Routes)。下面咱們來一一學習之~~ ruby

二、默認路由 Default Routes

顧名思義,默認路由是建立應用時,Rails自動生成的,位於routes.rb文件的最後一行。 服務器

match ':controller(/:action(/:id(.:format)))'

默認路由由’/'分割爲3部分,第一部分解釋爲控制器,第二部分解釋爲Action方法,第三部分變爲相應參數傳遞。 dom

例如,當有」http://domain.com/users/show/1″請求發生時,Rails去請求users控制器的show方法,並將id=1傳遞給show方法。 學習

三、資源路由 RESTful Routes

資源路由是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

  • users_path : 映射了 index 和 create 方法的路徑 ;
  • new_user_path : 映射了 new 方法的路徑 ;
  • edit_user_path : 映射了 edit 方法的路徑 ;
  • user_path : 映射了 show、update、destroy 方法的路徑 ;

四、命名路由 Named Routes

命名路由能夠爲任意一個肯定的URL定義名稱,該名稱亦可用在控制器方法中,實現頁面提交和重定向。例如: 對象

match 'hello', :to => 'users#index', :as => 'hello'

使用上述代碼後,Rails便知道’hello’須要調用users控制器的index方法。同時,還爲該路由建立了兩個輔助方法:

  • hello_path 和 hello_url : 映射了 users#index 方法的路徑 ;

五、嵌套路由 Nested Routes

嵌套路由是用於聲明一個資源包含另外一個關聯資源的訪問方式。例如:博客系統的文章和評論兩個資源就能夠這樣描述,由於評論應依附於文章存在,不該獨立出來。因而便有:

# 直觀的寫法
resources :articles do
  resources :comments
end
# 更簡單的寫法
resources :articles, :has_many => :comments

因而,當咱們http://domain.com/articles/1/comments請求資源時,rails會理解爲獲取id=1的那篇文章的全部評論。很直觀,有木有?

六、正則路由 Regular Routes

正則路由的使用機率較低,但它卻能完成很是嚴謹的路由訪問。它能夠爲每一個可變參數經行正則驗證,只有經過驗證的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
相關文章
相關標籤/搜索