Ruby on Rails 教程

Ruby 是什么?

Ruby 是一种高级的、解释型的、面向对象的编程语言。它是一种动态的开源语言,背后有一个庞大的社区。Ruby 的设计宗旨是简洁和高效。它鼓励优先考虑人类可读性,其次才是计算机可执行的代码。它由松本行弘于 1995 年在日本创建。

Rails 是什么?

Rails 是一个用 Ruby 编写的用于构建 Web 应用程序的开发框架。它最初是 Basecamp 应用程序的基础,并于 2004 年作为开源软件发布。Rails 提供了许多内置的标准特性和功能,这使其成为 MVP 原型设计和开发的合适选择。

它由 David Heinemeier Hasson(通常称为 DHH)创建。它是构建 Web 应用程序最具影响力和最流行的工具之一。它被一些受欢迎的网站使用,如 Airbnb、Github、Shopify 等。

为什么选择 Rails?

以下是使用 Rails 的优点/好处

  • Rails 被打包成一个 Ruby gem,您可以使用它来构建各种应用程序。
  • 它允许您构建常规的 Web 应用程序、电子商务应用程序、内容管理系统等等。
  • Rails 是一个全栈框架,包含构建数据库驱动的 Web 应用程序所需的一切,使用模型-视图-控制器模式。
  • 这意味着所有层都旨在无缝协作,代码量更少。它比其他框架需要更少的代码行。

如何在 Windows 上下载和安装 Ruby

安装过程将取决于您的操作系统。您将了解如何在 Windows、Mac 和 Linux 上安装 Ruby。

步骤 1) 下载 Rubyinstaller
在 Windows 计算机上安装 Ruby 最简单的方法是通过 Ruby Installer,您可以从 https://rubyinstaller.ruby-lang.org.cn/ 下载。

您只需运行下载的安装程序即可。

步骤 2) 点击下载的安装程序
双击下载的安装程序“rubyinstaller-2.4.1-2-x64.exe”。

步骤 3) 接受许可
选择“我接受许可”单选按钮,然后点击“下一步”按钮。这将带您到下面的下一张图。

Download and Install Ruby on Windows

步骤 4) 勾选前两个复选框
勾选前两个复选框,以便更容易运行 Ruby 脚本。

点击“安装”按钮开始安装。安装完成后,您应该会看到下图。

Download and Install Ruby on Windows

步骤 5) 点击完成
不要取消勾选安装 MSYS2 的复选框选项。点击“完成”完成安装,将显示如下图所示的命令提示符窗口。

Download and Install Ruby on Windows

步骤 6) 安装 MSYS2
此步骤安装 MSYS2,这是一个构建平台,具有包管理器,可方便地在 Windows 上安装包。

按 Enter 键安装所有组件,因为它们都是在 Windows 上顺利运行 Ruby on Rails 开发环境所必需的。

Download and Install Ruby on Windows

安装 Rails

您应该已经从上一节安装了 Ruby,现在您将安装 Rails。您可以使用 RailsInstaller 中的包安装 Rails,但问题是您无法获得所需包的最新版本。

如果您已经安装了最新的 Ruby 和一组必需的 RubyGems 和扩展的基础版本。您现在只需在命令提示符下运行以下命令即可在您的系统上获取 Rails:“gem install rails”。

如果您还没有 Node.js,您还需要安装它,因为 Rails 依赖的一些库需要 Javascript 运行时才能正常工作。您可以从 https://node.org.cn 获取 Node。

这是在 Windows 上开发更常见和首选的方法。Rails 社区使用适用于 Linux 的 Windows 子系统,该系统直接在 Windows 上提供带有命令行工具、实用程序和常用应用程序的 GNU/Linux 环境。

在 Mac 上安装 Ruby

您的 Mac 上已经预装了 Ruby。但是,预装版本可能较旧,因此您需要安装新/最新版本。

最简单的方法是使用包管理器,例如 Homebrew。您可能需要先在终端中运行以下命令来安装 Homebrew。

/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)

这将显示一个警告并要求您输入密码。输入您的 Mac 密码(输入时您将看不到字符)。输入密码后只需按“Enter”键。然后运行这个简单的 Homebrew 命令来在您的 Mac 上安装 Ruby。

brew install ruby

并运行此命令

echo "export PATH="/usr/local/bin:/usr/local/sbin:$PATH >> ~/.bash_profile

将此 Ruby 安装设置为系统默认运行的 Ruby,而不是预安装的 Ruby。

要确认安装成功,您可以在终端中运行以下命令

ruby --version

这将打印您已安装的 Ruby 版本号。输出将类似于

ruby 2.6.0p0 (2018-12-25 revision 66547) [x86_64-darwin18]

在 Ubuntu (Linux) 上安装 Ruby

在 Ubuntu 系统上安装 Ruby 最简单的方法是通过 apt 包管理器。您需要在终端中运行以下命令才能从 Ubuntu 仓库安装最新的 Ruby。

  • sudo apt update – 这将更新默认的 Ubuntu 仓库
  • sudo apt install ruby-full – 它将下载并安装最新的 Ruby

要确认安装成功,您可以运行 “ruby –version”,这将打印您已安装的 Ruby 版本。

在 Ubuntu (Linux) 上安装 Rails

您应该按照以下步骤在您的 Linux 机器上成功安装 Rails。

步骤 1) 在终端或命令提示符下运行 “gem update –system” 更新您的计算机 gem 管理器。

步骤 2) 运行 “gem install rails” 在您的计算机上安装最新版本的 Rails。

步骤 3) 您应该安装 bundler gem 以方便 Rails 应用程序 gem 依赖管理。运行 “gem install bundler” 获取它。

Rails 的两个原则

Rails 遵循基本的软件设计原则,并鼓励您也使用这些原则。

两个最常见的是

  • 不要重复自己 (DRY) – 这使您编写简洁、一致和可维护的代码。
  • 约定优于配置 – Rails 预配置使用适合大多数常见用途的合理默认值。这使得您的应用程序开发速度快,而且需要维护的代码也更少。

Rails – 项目文件结构

Rails 现在已安装在您的系统上,让我们创建一个 Rails 应用程序!在本 Ruby on Rails 教程中,我们将学习 Ruby on Rails 示例以及如何创建一个待办事项列表应用程序。在终端中运行以下命令 “rails new todo_app” 以创建应用程序。

此命令在当前目录中创建一个名为 “todo_app” 的目录,其中包含 Rails Web 应用程序的基本文件夹结构,如下图所示。

Rails – Project File Structures

您将在此 Ruby on Rails 示例中了解主要目录。

app – 此目录使用不同的子目录对 UI/布局(视图和助手)、控制器(控制器文件)和模型(业务/应用程序逻辑)进行分组。

app/controllers – 此目录存储 Rails 用于处理客户端请求的控制器文件。

app/assets – 它包含应用程序前端所需的静态文件,根据其类型分组到文件夹中 – JavaScript 文件、图像和样式表。

app/helpers – 此子目录包含助手函数,这些函数使您的应用程序模型、视图和控制器逻辑集中、小巧且整洁。

app/models – 此目录包含文件

模拟您的应用程序数据库。模型类使数据库操作变得非常容易。

app/views – 此目录包含您的应用程序用户与之交互的模板/布局文件。模板是 HTML 和数据库数据的组合。

bin – 它包含启动应用程序的 Rails 脚本。它还可以包含您用于设置和升级应用程序的其他脚本。

Config – 此目录包含您的应用程序运行所需的配置文件 – database.yml、environment.rb、routes.rb 等。

DB – 此目录包含用于管理应用程序数据库的文件/脚本。

lib – 此目录包含应用程序的扩展模块。

log – 此目录包含用于调试或监视应用程序的日志文件 – server.log、development.log、test.log 和 production.log 等。

public – 此目录包含静态文件和编译后的资产,例如 HTML 文件、Javascript 文件、图像和样式表。

test – 此目录包含您编写的用于测试应用程序功能的文件。

tmp – 此目录包含临时文件,如缓存和 pid 文件。

vendor – 此目录包含第三方库。

Gemfile – 此文件指定运行您的 Web 应用程序的基本 gem 要求。您可以将 gem 分组为开发、测试或生产,Rails 将知道何时包含每个 gem。

Gemfile.lock – 与明确列出应用程序中所需 gem 的 Gemfile 不同,Gemfile.lock 还包含 Gemfile 中列出的 gem 所依赖的其他 gem,这些 gem 将自动安装以满足依赖关系。

Readme.md – 您使用此文件分享有关应用程序的基本详细信息,例如应用程序的功能、如何安装和运行应用程序。

Rakefile – 此文件包含各种 rake 任务定义,有助于自动化应用程序的日常管理任务。

config.ru – 这是一个 Rack 配置文件,提供一个接口给 Web 服务器来启动您的应用程序。

将目录更改为 Rails 生成的 “todo_app” 目录,然后运行 “rails server” 启动应用程序。在 Web 浏览器的地址栏中键入 localhost:3000,如果一切顺利,您应该会看到下图。

Rails – Project File Structures

这是应用程序的默认主页,您将在本 Ruby on Rails 教程的后面部分更改它。您可以通过按 “Ctrl-C” 停止服务器。

Rails – 生成命令

Rails 的生成命令利用模板在您的应用程序中创建大量有用的东西。您可以使用这些生成器节省大量时间。

它通过编写样板代码(您的 Web 应用程序工作所必需的代码)来提供帮助。您可以在命令提示符或终端中单独运行 “rails generate” 以查看可用生成器的列表,如下所示。

Rails – Generate commands

您还可以运行 “rails generate 'command'” 来查看命令功能的描述。它提供了可以与命令一起运行的便捷选项和用法示例。下图显示了运行 “rails generate controller” 的输出。

Rails – Generate commands

您将使用 rails generate scaffold 命令自动为正在构建的待办事项列表应用程序创建模型、视图和控制器。在您的终端中运行 “rails generate scaffold todo_list title:string description: text”(检查您是否仍在 todo_app 目录中)。

这将为 TodoLists 表创建一个完整的 CRUD(创建、读取、更新和删除)Web 界面。

另一个有用的命令是 “rails destroy”,它会撤销 “rails generate…” 所做的一切。

Rails – 路由

Rails 路由系统(Rails 路由器)处理所有传入您的 Web 应用程序的请求。它通过检查传入请求的 URL,然后使用路由文件 (config/routes.rb) 中指定的特殊语法将每个请求映射到负责处理它的控制器操作来完成此操作。

路由文件有助于控制 Web 应用程序的所有 URL 方面。Rails 默认使用基于 REST 架构风格的 RESTful 设计,该设计提供 HTTP 动词和请求 (URL) 到控制器操作之间的映射。

当您在本教程的前面部分运行 “rails new” 时,路由文件已生成。继续构建待办事项应用程序,运行以下命令 “rails db:migrate”(您很快就会知道这是做什么的)。

在命令行中,确保您仍在应用程序的根目录(todo_app 目录)中。

然后再次使用 “rails server” 启动服务器。在浏览器地址栏中输入 https://:3000/todo_lists/ 并按 Enter 键。您应该会看到一个网页,如下图所示的 Ruby on Rails 示例。

Rails – Routing

这是由 scaffold 命令生成的待办事项列表视图,由 TodoListsController 的 index 动作控制。

继续并点击页面上的“新建待办事项列表”添加一个待办事项列表,您应该会看到如下图所示的页面。

Rails – Routing

请注意,URL 已更改为 https://:3000/todo_lists/new。这是创建新待办事项列表的页面,由 TodoListsController 的 new 方法/动作控制。

在表单中输入您的待办事项列表标题和描述,然后单击“创建待办事项列表”按钮,URL 应更改为 https://:3000/todo_lists/1,如以下 Ruby on Rails 代码示例图所示。

Rails – Routing

这是待办事项列表的显示页面,由 TodoListsController 的 show 方法/操作控制。如果您返回到 https://:3000/todo_lists/,您现在应该会看到下图,其中添加了一个新的待办事项列表。

Rails – Routing

Rails 能够使用 config/routes.rb 中的路由定义,将各种请求 (URL) 映射到相应的 TodoListsController 的操作。

如果您查看此文件,您会看到一行 “resources: todo_lists”,这是 Rails 编写 RESTful 路由的默认方式。这一行创建了七个路由,全部映射到 TodoLists 控制器。

按照惯例,每个控制器的操作也映射到数据库中特定的 CRUD(创建、读取、更新和删除)操作。

您可以在命令行中运行 “rake routes” 来查看应用程序中可用的各种路由。下图显示了在命令行/终端中运行 “rails routes” 的输出。

Rails – Routing

Rails – 视图

视图层是 MVC 范式的一个组件,负责为您的应用程序的每个请求生成 HTML 响应。Rails 默认使用 ERB(嵌入式 Ruby),它是一个功能强大的 Ruby 模板系统。

ERB 通过将纯文本与 Ruby 代码结合用于变量替换和流控制,使模板编写变得简单且易于维护。ERB 模板具有 .html、.erb 或 .erb 扩展名。

您主要只使用两种标签标记组合,每种标记都会导致嵌入代码以特定方式进行处理。

带有等号 “<%= %>” 的标签表示嵌入代码是一个表达式,渲染器在渲染模板时应替换代码的结果。

另一个没有等号 “<% %>” 的标签指示渲染器在渲染模板时不应替换/打印代码的结果。

您的 Rails 应用程序中的每个控制器在 app/views 中都有一个相应的子目录,并且控制器中的每个动作/方法在此目录中都有一个相应的 .html 和 .erb 文件。

查看您正在构建的 todo 应用程序的 app/views。您会在此子目录中找到一个名为 “todo_lists” 的子目录,其中包含与 TodoLists 控制器中的动作/方法对应的 .html.erb 文件。

Rails – ActiveRecord、Active Record 模式和 ORM

ActiveRecord 是 Active Record 模式的 Ruby 实现,这是一种简单模式,其中一个类表示一个表,一个类的实例表示该类中的一行。

ActiveRecord 通常被称为 ORM(对象关系映射),这是一种允许您使用最熟悉的语言管理数据库的技术。它是数据库无关的,因此您可以轻松地在数据库之间切换(例如 SQLiteMySQLPostgreSQL、SQL Server、Oracle 等)。这更符合您的应用程序要求,且代码/逻辑相同。

因此,如果您想获取一个数组,其中包含应用程序中所有待办事项列表的列表,那么,您无需编写代码来启动与数据库的连接,然后执行某种 SQL SELECT 查询,并将这些结果转换为数组。

为此,您只需输入“TodoList.all”,Active Record 就会为您提供一个充满 TodoList 对象的数组,您可以随心所欲地使用它们。

您只需在 config/database.yml 中设置正确的配置,Active Record 就会处理各种数据库系统之间的所有差异。因此,当您从一个切换到另一个时,您不必考虑它。

您专注于为您的应用程序编写代码,Active Record 将考虑将您连接到数据库的低级细节。Active Record 利用命名约定在模型和数据库表之间创建映射。

Rails 将您的模型类名复数化以查找相应的数据库表。因此,对于 TodoList 类,ActiveRecord 将创建一个名为 TodoLists 的数据库表。

Rails – 迁移

Rails 迁移只是一个用于编辑应用程序数据库的脚本。它用于设置或更改数据库,并避免手动编写 SQL 代码来执行此操作。

它使用 Ruby 来定义数据库模式的更改,并使使用版本控制保持数据库同步成为可能。

Rails 迁移使用 Ruby 领域特定语言 (DSL)。这充当了抽象层,使得可以根据您的需求使用或更改数据库引擎。

它们可以与任何从事该应用程序的人共享,并且还可以回滚以撤消对数据库的任何更改。这是一种高安全机制,因为您不必担心对数据库造成永久性损害。

Rails – ActiveRecord 关联

两个 ActiveRecord 模型之间的连接称为关联。关联使得在代码中对不同记录执行操作变得更加容易。它可以分为四类:–

一对一:– 这表示一个记录只包含另一个模型的一个实例。一个很好的例子是用户个人资料。一个用户只有一个个人资料。它使用 has_one 关键字。

一对多:– 这是最常见的关联,它表示一个模型包含零个或多个另一个模型的实例。您使用 has_many 关键字来表示此关联。

多对多:– 这种关联有点复杂,ActiveRecord 提供了两种处理方式。使用 has_and_belongs_to_manyhas_many,这使您可以访问在单独表中定义的关系。

多态一对多:- 这是 Rails 中可用的一种更高级的关联。您可以使用它来定义一个模型,该模型可能属于单个关联上的许多不同模型。

Rails – ActiveRecord 验证

验证有助于确保您拥有正确的数据,因为使用错误数据是一件糟糕的事情,可能会让您损失金钱和业务。

验证还为您的应用程序提供了一个额外的安全层,以防止恶意用户获取数据库中的信息。Rails 为您提供了一个很好的 ActiveRecord 验证助手 API,以保持您的数据库干净、安全和无错误。

ActiveRecord 验证在保存到数据库之前在模型对象上运行,这使得它们更可靠,也是构建应用程序的最佳实践。

以下 ActiveRecord 方法在使用或调用模型对象时会触发验证 – create、create!、save、save!、update 和 update!。带感叹号的方法 (create!、save! 和 update!) 如果记录无效则会引发异常,而其他方法则不会。

您可以使用最常见的 ActiveRecord 验证助手是:-

确认:——这个验证助手对于验证两个字段具有相同条目很有用。例如,密码和密码确认,它与存在验证助手结合使用。

存在性:——这会检查字段是否不为空。

唯一性:确保字段的唯一值,例如用户名

长度:——用于强制限制字段的字符长度

您还可以通过使用 validate 方法并向其传递自定义验证方法的名称来创建自定义验证。

您可以检查模型的 error 对象以找出验证失败的原因。希望您有一些想法来使您的应用程序更加受限和安全,以只允许安全数据进入您的数据库。

Rails – ActionController

Rails 控制器是您的 Web 应用程序的中心。它促进和协调用户、模型和视图之间的通信。

您的控制器类继承自 ApplicationController,其中包含可以在所有其他控制器中运行的代码,并且它继承自 ActionController 类。

控制器为您的应用程序提供以下功能

  • 它将外部请求路由到内部操作
  • 它管理缓存,为您的应用程序带来性能提升
  • 它管理扩展视图模板功能的辅助方法。它还管理用户会话,为他们提供流畅的应用程序使用体验。

Rails – 配置

您可以配置各种组件,例如初始化器、资产、生成器、中间件等。通过使用您的 Rails 应用程序初始化器和 config 目录中的配置文件。例如 config/application.rb、config/environments/development.rb 和 config/environments/test.rb 等。您还可以为您的应用程序配置自定义设置。

Rails – 调试

随着您构建应用程序,总有一天您需要调试代码。Rails 使用 byebug gem 使这变得容易。您可以通过在应用程序代码中的任何位置放置“byebug”关键字来启动调试会话。

这将暂时停止在该点的执行。byebug gem 为您提供了几个可用的命令。最有用的命令是:

  • next:允许您跳到下一行代码的命令,跳过当前行执行调用的所有方法。
  • step:这与“next”命令类似,但会使您步入每个被调用的方法。
  • break:这会停止代码执行。
  • continue:继续执行代码。

还有其他可用的调试 gem,例如“pry”,它们都提供类似的功能,但语法略有不同。调试 gem 不应在生产环境中使用,因为这会对您的应用程序造成风险,并给您的应用程序用户带来糟糕的体验。

有一些日志文件可供您检查生产环境中的错误并进行处理。此外,在开发应用程序时,您应该遵循 TDD(测试驱动开发)方法,以确保在部署到生产环境之前一切正常。

摘要

  • Ruby 是一种纯粹的面向对象编程语言
  • Ruby 语法优雅,易于阅读和编写。
  • Rails 是一个用 Ruby 编写的用于构建 Web 应用程序的开发框架
  • 安装过程将取决于您的操作系统。
  • Rails 被打包成一个 Ruby gem,您可以使用它来构建各种应用程序。
  • 您将在本教程中创建一个待办事项列表应用程序,在您的终端中运行以下命令“rails new todo_app”以创建应用程序。
  • Rails 的生成命令利用模板在您的应用程序中创建大量有用的东西。
  • Rails 路由系统(Rails 路由器)帮助您处理所有传入您的 Web 应用程序的请求。
  • 视图层是 MVC 范式的一个组件,负责为您的应用程序的每个请求生成 HTML 响应。
  • ActiveRecord 是 Active Record 模式的 Ruby 实现。
  • Rails 迁移只是一个用于编辑应用程序数据库的脚本。
  • 两个 ActiveRecord 模型之间的连接称为关联。
  • 验证有助于确保您拥有正确的数据,因为使用错误数据是一件糟糕的事情,可能会让您损失金钱和业务。
  • Rails 控制器帮助您促进和协调用户、模型和视图之间的通信。
  • Rails 帮助您配置各种组件,例如初始化器、资产、生成器、中间件等。