2.玩具应用
第二章,作者通过脚手架(scaffold generator) 快速地构建了一个应用,并围绕该应用谈论了关于数据模型、模型资源、 MVC 架构、REST 架构的相关知识.
数据模型 & 模型资源
数据模型(data model) 用于表示应用所需的结构,例如:在一个微博类的网站中,包含两个数据模型: Micropost 和 User.
模型资源(resource) 是数据模型与网页页面的结合,可以通过 HTTP 命令来实现对模型的操作.这一思想与 REST 架构方式有关.
MVC 架构 & REST 架构
Rails 的整体的架构是 MVC 架构,(MVC 是 model-view-controller 的缩写)其架构图如下:

当用户看到一个界面的时候,整体的流程如下:
- 用户在浏览器中点击一个链接,浏览器向 Router 发送一个 HTTP 请求
- Router 识别这个请求对应的 Controller action(控制器动作)
- Controller 执行该动作,然后与 Model 交互,请求得到相应的数据
- Model 与数据库交互,取出相应的数据,将其递交给 Controller
- Controller 将数据发给 View,使其产生具有特定数据的 HTML 页面
- View 返回对应的 HTML 界面给 Controller
- Controller 发送给浏览器
- 浏览器渲染该界面,用户看到该界面
Controller 有很多动作与特定的 route 相匹配.
其中, Controller 中有四个动作: CRUD(create, read, update, destroy) 一般不直接渲染页面.
其主要的任务是更改数据库中的数据,这与 HTTP 协议中的 GET, POST, PATCH, DELETE 一一对应,这样的架构称为 REST ( Representational State Transfer) 架构.
以下表为例:
其中以红框表示的是能够对用户的数据库中的数据进行改变的,另外的几个动作则是渲染新的页面.
也就是说:控制器动作具有两个功能 :
- 第一个功能是渲染新的页面
- 第二个功能是根据用户的 HTTP 请求和 URL 来改变数据库中的数据.(REST 架构)
继承体系
Rails 中的 model 与 controller 有一定的继承体系,
对于 model 来说(以 Micropost 为例):
Micropost 继承自 ApplicationRecord, 又继承自 ActiveRecord::Base
其功能有:
- 使模型对象与数据库通信
- 将数据库中的咧看作为 Ruby 中的属性
对于 controller 来说(以 UsersController) 为例):
UsersController 继承自 ApplicationController ,又继承自 ActionController:Base
其功能有:
- 使控制器具有处理模型对象的能力
- 过滤入站 HTTP 请求的能力
- 把视图渲染成 HTML 的能力