免费视频淫片aa毛片_日韩高清在线亚洲专区vr_日韩大片免费观看视频播放_亚洲欧美国产精品完整版

打開APP
userphoto
未登錄

開通VIP,暢享免費(fèi)電子書等14項(xiàng)超值服

開通VIP
Ruby On Rails 路由配置簡述

轉(zhuǎn) Ruby On Rails 路由配置簡述

1

1、認(rèn)識(shí)Rails路由配置文件:routes.rb

在Rails應(yīng)用程序中,routes.rb 文件管理著所有用戶從客戶端向服務(wù)器發(fā)送的請(qǐng)求,該如何轉(zhuǎn)化?routes.rb通過分析URL,來確定要調(diào)用哪個(gè)控制器的哪個(gè)Action方法。

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

2、默認(rèn)路由 Default Routes

顧名思義,默認(rèn)路由是創(chuàng)建應(yīng)用時(shí),Rails自動(dòng)生成的,位于routes.rb文件的最后一行。

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

這是我們?cè)谏弦徽滤褂玫姆绞?,也?/span>Rails 3.0之前版本的默認(rèn)方式。其中的括號(hào)用法表示可有可無,也就是上述這一行設(shè)定就包括六種路徑方式:

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

例如,像這樣的網(wǎng)址http://localhost:3000/welcome/say便會(huì)對(duì)應(yīng)到welcome controllersay action。典型路由是一種非常簡便的對(duì)應(yīng)方式。這種方式的缺點(diǎn)當(dāng)網(wǎng)站的Action變多的時(shí)候,會(huì)容易讓Controller的設(shè)計(jì)變得混亂沒有規(guī)則。稍后介紹的RESTful路由則是Rails對(duì)此提出的組織路由方案。


默認(rèn)路由由’/'分割為3部分,第一部分解釋為控制器,第二部分解釋為Action方法,第三部分變?yōu)橄鄳?yīng)參數(shù)傳遞。

例如,當(dāng)有”http://domain.com/users/show/1″請(qǐng)求發(fā)生時(shí),Rails去請(qǐng)求users控制器的show方法,并將id=1傳遞給show方法。

match 'meetings/:id', :to => 'events#show'

這里的events#show表示指向events controllershow action。通常會(huì)簡寫成:

match 'meetings/:id' => 'events#show'

注意到在routes.rb中,越上面越優(yōu)先。是如果有網(wǎng)址同時(shí)符合多個(gè)規(guī)則,會(huì)使用最上面的規(guī)則

3、資源路由 RESTful Routes

資源路由是Rails用來描述資源及其狀態(tài)的,通俗些,就是用來描述數(shù)據(jù)庫表/實(shí)體的相關(guān)數(shù)據(jù)操作。

值的注意的是,資源路由巧妙的使用了HTTP響應(yīng),完成了數(shù)據(jù)庫CRUD操作。例如:

resources :users

這樣就產(chǎn)生了7種不同的路由,用來描述User的數(shù)據(jù)庫操作。如下表所示:

HTTP響應(yīng)URLAction方法描述
GET/usersindex獲取所有user數(shù)據(jù)
GET/users/newnew跳轉(zhuǎn)到創(chuàng)建user頁面
POST/userscreate創(chuàng)建新的user
GET/users/1show獲取id=1的user對(duì)象
GET/users/1/editedit編輯id=1的user對(duì)象
PUT/users/1update更新id=1的user對(duì)象
DELETE/users/1destroy刪除id=1的user對(duì)象

這7中路由完成了資源的所有CRUD操作,與此同時(shí),rails還為資源生成了一些輔助方法:

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

4、命名路由 Named Routes

命名路由可以為任意一個(gè)確定的URL定義名稱,該名稱亦可用在控制器方法中,實(shí)現(xiàn)頁面提交和重定向。例如:

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

使用上述代碼后,Rails便知道’hello’需要調(diào)用users控制器的index方法。同時(shí),還為該路由創(chuàng)建了兩個(gè)輔助方法:

  • hello_path 和 hello_url : 映射了 users#index 方法的路徑 ;
    補(bǔ)充:
  • Named Routes可以幫助我們產(chǎn)生URL helpermeetings_urlmeetings_path,而不需要用{:controller => 'meetings', :action => 'index'}的方式:

    match '/meetings' => 'events#index', :as => "meetings"

    其中:as的部份就會(huì)產(chǎn)生一個(gè)meetings_pathmeetings_urlHelpers,_path_url的差別在于前者是相對(duì)路徑,后者是絕對(duì)路徑。一般來說比較常用_path方法,除非像是在Email信件中,才必須用_url提供包含Domain的完整網(wǎng)址。

    雖然RESTful已經(jīng)是設(shè)計(jì)Rails最常見的路徑模式,但是在一些特殊的情況、不符合CRUD模型的情結(jié)就不一定適用了,例如有多重步驟的窗體(又叫作Wizard) 時(shí),使用命名路由反而會(huì)比較簡潔,例如step1_path, step2_path, step3_path

  • HTTP動(dòng)詞(Verb)限定

    可以透過 :via 參數(shù)指定 HTTP Verb 動(dòng)詞

    match "account/overview" => "account#overview", :via => "get"
    match "account/setup" => "account#setup", :via => [:get, :post]

    或是

    get "account/overview" => "account#overview"
    get "account/setup" => "account#setup"
    post "account/setup" => "account#setup"

    特殊條件限定

    我們可以利用:constraints設(shè)定一些參數(shù)限制,例如限制:id必須是整數(shù)。

    match "/events/show/:id" => "events#show", :constraints => {:id => /\d/}

    另外也可以限定IP位置:

    constraints(:ip => /(^127.0.0.1$)|(^192.168.[0-9]{1,3}.[0-9]{1,3}$)/) do
        match "/events/show/:id" => "events#show"

5、嵌套路由 Nested Routes

嵌套路由是用于聲明一個(gè)資源包含另一個(gè)關(guān)聯(lián)資源的訪問方式。例如:博客系統(tǒng)的文章和評(píng)論兩個(gè)資源就可以這樣描述,因?yàn)樵u(píng)論應(yīng)依附于文章存在,不應(yīng)獨(dú)立出來。于是便有:

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

resources :projects do
  resources :tasks, :people
end

如此產(chǎn)生的URL Helperproject_tasks_path(@project)project_task_path(@project, @task),它的網(wǎng)址會(huì)如projects/123/tasksprojects/123/tasks/123。

實(shí)務(wù)上不建議設(shè)計(jì)超過兩

自定群集路由C

于是,當(dāng)我們http://domain.com/articles/1/comments請(qǐng)求資源時(shí),rails會(huì)理解為獲取id=1的那篇文章的所有評(píng)論。很直觀,有木有?

6、正則路由 Regular Routes

正則路由的使用概率較低,但它卻能完成非常嚴(yán)謹(jǐn)?shù)穆酚稍L問。它可以為每個(gè)可變參數(shù)經(jīng)行正則驗(yàn)證,只有通過驗(yàn)證的url,才會(huì)被指定到定義好的控制器方法中去。簡單舉個(gè)例子:

match 'users/search/:id/:age', :controller => 'users', :action => 'search', :age => /[2-5][0-9]/

上面的路由只有在age參數(shù)傳遞在20-59之間時(shí)才會(huì)被匹配,如http://domain.com/users/search/1/25,便會(huì)匹配成功;而http://domain.com/users/search/1/60,則不會(huì)被匹配。

7、路由優(yōu)先級(jí)

在Rails中,路由生效的優(yōu)先級(jí)是:從routes.rb文件定義的路由中從上到下依次匹配,最早匹配的路由會(huì)生效。也就是說routes.rb文件中的路由優(yōu)先級(jí)從上到下依次降低。

PS:當(dāng)沒有任何路由匹配到時(shí),Rails會(huì)拋出Routing Error異常。

8、查看當(dāng)前應(yīng)用路由規(guī)則

查看當(dāng)前路由規(guī)則時(shí),只需Terminal進(jìn)入項(xiàng)目目錄,運(yùn)行下述命令即可:

本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊舉報(bào)。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
路由器策略與策略路由器有什么區(qū)別?
跨越邊界: REST on Rails
ThinkPHP路由詳解
5.路由
閉包支持
(4)學(xué)習(xí)tp5之路由類型,定義,動(dòng)態(tài)注冊(cè),過濾,閉包,miss(默認(rèn)),資源路由
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長圖 關(guān)注 下載文章
綁定賬號(hào)成功
后續(xù)可登錄賬號(hào)暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服