以MVC的思維方式來理解Ruby on Rails框架的設(shè)計(jì)結(jié)構(gòu)
在rails中,發(fā)送一個(gè)請求(/users)的處理全過程如下:
1)、瀏覽器發(fā)送請求(/users)
2)、Rails的 routes會把請求路由給users_controller的index方法
3)、users_controller回調(diào)用User Model獲取所有的user
4)、User Model會從數(shù)據(jù)庫中把所有的user讀取出來,
5)、User Model把從數(shù)據(jù)庫讀取出來的所有user封裝為List返回給user_controller
6)、user_controlle把User Model返回user list賦值給實(shí)例變量@users,該變量會傳遞給index view
7)、index view接收傳遞過來的@users,并通過內(nèi)嵌的ruby把view渲染為HTML
8)、user_controller把渲染好的頁面返回給瀏覽器
不同的請求處理過程基本上一樣,除了路由策略,即調(diào)用不一樣的controller,或者controller的不同方法,具體的調(diào)用策略由Rails Router決定。
Rails Router
Rails中的針對Resource的路由策略完全遵守REST的設(shè)計(jì)風(fēng)格,即URL只是負(fù)責(zé)定位資源,對資源的操作通過原生的HTTP Method類型來決定,只需要在routes.rb中配置上resources :users,就可以得到如下的一系列路由策略:
HTTP request URI Action Purpose GET /users index page to list all users GET /users/1 show page to show user with id 1 GET /users/new new page to make a new user POST /users create create a new user GET /users/1/edit edit page to edit user with id 1 PUT /users/1 update update user with id 1 DELETE /users/1 destroy delete user with id 1
當(dāng)然,除了REST風(fēng)格的各種routes, Rails還支持各種定制的routes規(guī)則,方法如下:在routes.rb中加上語句
match 'user/create' => 'users#new', :via => :get
該規(guī)則匹配的是瀏覽器瀏覽/user/create,Rails會將請求路由到users_controller的new方法上,其他的處理都和/users/new一樣。不過要注意的是,Rails會使用第一個(gè)匹配上的規(guī)則,如果我們把上面的那條route語句改為
match 'users/create' => 'users#new', :via => :get
,其就不會按我們設(shè)想的工作了,其會匹配到到規(guī)則
GET /users/1 show page to show user with id 1
,
即獲取id為created的user。
- Ruby rails 頁面跳轉(zhuǎn)(render和redirect_to)
- Rails link_to 詳解
- rails常用數(shù)據(jù)庫查詢操作、方法淺析
- 學(xué)習(xí)Ruby你需要了解的相關(guān)知識(rvm, gem, bundle, rake, rails等)
- Windows下Ruby on Rails開發(fā)環(huán)境安裝配置圖文教程
- rails "No route matches" 錯(cuò)誤的解決方法
- ruby on rails 代碼技巧
- 攻克CakePHP(PHP中的Ruby On Rails框架)圖文介紹
- rails 連接mysql的問題解決
- 在阿里云 (aliyun) 服務(wù)器上搭建Ruby On Rails環(huán)境
- CentOS中配置Ruby on Rails環(huán)境
- win7安裝ruby on rails開發(fā)環(huán)境
相關(guān)文章
ruby實(shí)現(xiàn)github第三方認(rèn)證
GitHub在用戶認(rèn)證過程中采用了雙匙機(jī)制,在雙匙加密機(jī)制中,只有合法用戶才擁有私匙,只要GitHub在收到請求時(shí)可以證明提交請求的客戶端上擁有該私匙,即可以確認(rèn)該操作是由合法用戶發(fā)起的。我們通過ruby來簡單模擬下吧。2015-06-06CentOS中配置Ruby on Rails環(huán)境
經(jīng)過一個(gè)上午的折騰,終于把ROR環(huán)境在CentOS中搞定,繞了很多彎路,把文章寫下來總結(jié)一下2014-03-03