Rails的MVC和路由策略

[b][size=small]MVC In Rails[/size][/b]
[img]http://dl.iteye.com/upload/attachment/0070/7850/0a156cc2-c1b3-3ef5-b669-76b184e8efe6.png[/img]
[size=small]在rails中,發送一個請求(/users)的處理全過程如下:
1)、瀏覽器發送請求(/users)
2)、Rails的 routes會把請求路由給users_controller的index方法
3)、users_controller回調用User Model獲取所有的user
4)、User Model會從數據庫中把所有的user讀取出來,
5)、User Model把從數據庫讀取出來的所有user封裝爲List返回給user_controller
6)、user_controlle把User Model返回user list賦值給實例變量@users,該變量會傳遞給index view
7)、index view接收傳遞過來的@users,並通過內嵌的ruby把view渲染爲HTML
8)、user_controller把渲染好的頁面返回給瀏覽器

不同的請求處理過程基本上一樣,除了路由策略,即調用不一樣的controller,或者controller的不同方法,具體的調用策略由Rails Router決定
[/size]
[b][size=small]Rails Router[/size][/b]
[size=small]Rails中的針對Resource的路由策略完全遵守REST的設計風格,即URL只是負責定位資源,對資源的操作通過原生的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

當然,除了REST風格的各種routes, Rails還支持各種定製的routes規則,方法如下:在routes.rb中加上語句[/size]
match 'user/create' => 'users#new', :via => :get 
[size=small]該規則匹配的是瀏覽器瀏覽/user/create,Rails會將請求路由到users_controller的new方法上,其他的處理都和/users/new一樣。不過要注意的是,Rails會使用第一個匹配上的規則,如果我們把上面的那條route語句改爲[/size]
match 'users/create' => 'users#new', :via => :get 
,[size=small]其就不會按我們設想的工作了,其會匹配到到規則[/size]
GET /users/1 show page to show user with id 1,
即獲取id爲created的user。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章