Skip to content

Ruby on Rails - 框架

Web 框架提供了一种构建 Web 应用的结构化方式,处理常见任务,让您能专注于应用程序的独特功能。Ruby on Rails 是遵循 Model-View-Controller (MVC) 架构模式的典型框架。

构建 Rails 应用时,您的开发过程通常涉及以下核心活动:

  • 描述并建模应用程序的领域 (Domain): 这包括识别应用程序中的关键实体(例如,用户、产品、文章)、它们的属性以及它们之间的关系。这转化为数据库表设计和相应的 Rails 模型 (models)。
  • 定义应用程序逻辑和行为 (Logic and Behavior): 这涉及指定用户可以在应用程序中执行的操作。例如,用户可以创建账户、产品可以添加到购物车、文章可以发布。此逻辑主要位于 Rails 控制器 (controllers) 和模型 (models) 中。
  • 设计用户界面 (User Interface): 这是用户与应用程序交互的方式。您将设计网页(视图,views)来显示信息和用于用户输入的表单 (forms)。这涉及 HTML、CSS 和 JavaScript,通常由 Rails 视图 (views) 和助手 (helpers) 管理。

Ruby on Rails 使用 MVC 模式巧妙地管理这些任务。

Model-View-Controller (MVC) 原则将应用程序分解为三个相互关联的组件,每个组件都承担着独特的职责:

模型 (Model)(由 Active Record 处理)

Section titled “模型 (Model)(由 Active Record 处理)”

模型 (Model) 表示应用程序的数据和业务逻辑。它负责:

  • 与数据库交互(查询、创建、更新、删除记录)。
  • 执行数据验证规则(例如,电子邮件必须采用有效格式)。
  • 管理不同数据实体之间的关系(例如,一个用户有多篇文章)。
  • 封装与数据相关的复杂业务逻辑。

在 Rails 中,这主要由 Active Record 处理。Active Record 是一个对象关系映射器(Object-Relational Mapper, ORM),它将数据库表映射到 Ruby 类,并将表行映射到 Ruby 对象。这使您可以使用惯用的 Ruby 代码而不是编写原始 SQL 查询来处理数据。

视图 (View) 负责向用户呈现数据。这是用户在网络浏览器中看到并与之交互的内容。Rails 中的视图:

  • 通常是包含嵌入式 Ruby 代码的 HTML 模板(ERB 文件,例如 index.html.erb)。
  • 接收来自控制器 (Controller) 的数据并动态渲染它。
  • 应包含最少的逻辑,主要专注于呈现。
  • 也可以渲染其他格式,例如 JSON 或 XML,用于 API 响应。

Rails 使用 Action View 来管理视图 (views)。Action View 提供模板渲染 (template rendering)、用于常见 UI 任务的助手 (helpers)(如生成表单或链接),以及对布局 (layouts) 的支持,以保持一致的外观和感觉。

控制器 (Controller)(由 Action Controller 处理)

Section titled “控制器 (Controller)(由 Action Controller 处理)”

控制器 (Controller) 在模型 (Model) 和视图 (View) 之间充当中间人。它处理用户请求,与模型 (Model) 交互以获取或修改数据,然后选择一个视图 (View) 来呈现该数据。职责包括:

  • 接收来自浏览器的传入 HTTP 请求。
  • 解析请求参数 (request parameters)(例如,表单数据、URL 段)。
  • 调用适当的模型 (Model) 方法来执行业务逻辑或数据操作。
  • 准备要传递给视图 (View) 的数据。
  • 渲染适当的视图 (View) 或将用户重定向到另一个 URL。

Action Controller 是管理控制器 (controllers) 的 Rails 组件。它处理路由 (routing)、请求处理 (request processing)、会话管理 (session management)、缓存 (caching) 等等。

Rails MVC 应用中典型的请求-响应周期如下所示:

  1. 用户在浏览器中与应用程序交互(例如,点击链接或提交表单),向服务器发送 HTTP 请求。
  2. Rails 路由器 (Router) 检查请求 URL 和 HTTP 方法,以确定哪个控制器 (Controller) 动作 (action) 应该处理它。
  3. 指定的控制器 (Controller) 动作 (action) 被调用。它可能会读取请求中的参数 (parameters)。
  4. 控制器 (Controller) 与模型 (Model) 交互,以获取、创建、更新或删除数据。模型 (Model) 与数据库通信。
  5. 模型 (Model) 将数据(如果有)返回给控制器 (Controller)。
  6. 控制器 (Controller) 准备任何必要的数据(通常作为实例变量 (instance variables),例如 @users),并选择适当的视图 (View) 进行渲染。
  7. 视图 (View) 模板被渲染,结合了控制器 (Controller) 提供的数据,以生成 HTML 页面(或 JSON 等其他格式)。
  8. Web 服务器将生成的 HTML 页面作为 HTTP 响应发送回用户的浏览器。

这种职责分离 (separation of concerns) 使得 Rails 应用程序更容易开发、测试和维护。

虽然核心 Rails 框架组件(Active Record、Action View、Action Controller,后两者合称为 Action Pack)驻留在已安装的 Rails gem 中,但您主要通过应用程序的目录结构与它们交互:

  • app/models/:包含您的 Active Record 模型 (model) 类。
  • app/views/:包含您的 Action View 模板文件 (template files),按控制器 (controller) 组织。
  • app/controllers/:包含您的 Action Controller 类。

Active Record 提供数据库交互层。Action Controller 和 Action View(Action Pack 的一部分)处理请求 (request) 和呈现 (presentation)。Rails 协调这些组件,以提供连贯的开发体验。