当前位置: 代码网 > it编程>前端脚本>Ruby > 以MVC的思维方式来理解Ruby on Rails框架的设计结构

以MVC的思维方式来理解Ruby on Rails框架的设计结构

2024年05月18日 Ruby 我要评论
在rails中,发送一个请求(/users)的处理全过程如下: 1)、浏览器发送请求(/users) 2)、rails的 routes会把请求路由给users_controller的index方法 3

在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决定。

rails router
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中加上语句

match 'user/create' => 'users#new', :via => :get 

 
该规则匹配的是浏览器浏览/user/create,rails会将请求路由到users_controller的new方法上,其他的处理都和/users/new一样。不过要注意的是,rails会使用第一个匹配上的规则,如果我们把上面的那条route语句改为

match 'users/create' => 'users#new', :via => :get 

,其就不会按我们设想的工作了,其会匹配到到规则

get    /users/1   show    page to show user with id 1


即获取id为created的user。

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com