位置:首页 > Ruby > 从MVC架构视角理解Ruby on Rails框架设计结构

从MVC架构视角理解Ruby on Rails框架设计结构

时间:2026-08-18  |  作者:星河游者  |  阅读:0

当你向一个 Rails 应用发送 /users 请求时,背后其实是一套紧密协作的流水线。

整个过程的关键在于:浏览器发起请求,路由负责分发,控制器协调处理,模型读取数据,视图输出页面,最后再返回给浏览器。

  • 浏览器把请求扔出去,目标路径是 /users
  • Rails 的路由器(Router)接到任务,判断该由哪个控制器和动作来处理。这活儿落到了 users_controllerindex 方法头上。
  • 控制器接着去调用 User 模型,让它把数据库里所有用户捞出来。
  • 模型从数据库里读取数据,然后封装成一个列表(List)返还给控制器。
  • 控制器拿到这个列表,把它赋值给实例变量 @users。这个变量随后会被传递给视图(View)。
  • 视图接收 @users,通过内嵌的 Ruby 代码渲染成 HTML 页面。
  • 最后,控制器把渲染好的页面返回给浏览器,用户就看到结果了。

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

不同的请求,处理流程基本大同小异。

唯一变化的地方是路由策略,也就是调用的控制器不同,或者控制器里的方法不同。

具体怎么分配,全由 Rails Router 说了算。

Rails Router

Rails 对资源(Resource)的路由策略,完全遵循 REST 设计风格。

简单说,URL 只负责定位资源,而对资源的操作通过 HTTP 方法(GET、POST、PUT、DELETE 等)来决定。

你只需要在 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 风格的路由,Rails 也支持自定义规则。

比如你可以在 routes.rb 里加这么一句:

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

这条规则的意思是:当浏览器访问 /user/create 时,Rails 会把请求路由到 users_controllernew 方法。

其他处理逻辑和 /users/new 完全一样。

路由匹配顺序很关键

不过有个细节需要注意:Rails 会优先匹配第一条命中的规则。

如果你把上面的语句改成 match 'users/create' => 'users#new', :via => :get,那它就不会按你设想的方式工作了。

因为 users/create 这个路径会先匹配到默认的 REST 规则:

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

也就是说,它会试图去获取一个 id 为 created 的用户,而不是你想要的 new 动作。

路由的匹配顺序,就是这么关键。

免责声明:文中图文均来自网络,如有侵权请联系删除,心愿游戏发布此文仅为传递信息,不代表心愿游戏认同其观点或证实其描述。

相关文章

更多

精选合集

更多

大家都在玩

热门话题

大家都在看

更多