Skip to content

Ruby on Rails - 介绍

在深入学习 Rails 之前,了解 Ruby 是必要的,它是构建 Rails 的编程语言。

Ruby 通常被描述为以下几种语言的结合:

  • Smalltalk 的概念优雅和纯粹的面向对象思想,
  • Python 的易用性和可读性,以及
  • Perl 的实用脚本能力。

Ruby 的主要特性:

  • 一种动态的、开源的编程语言,专注于简洁性和生产力。
  • 解释型语言,类似于 Perl、Python 和 Tcl/TK。
  • 真正意义上的面向对象:在 Ruby 中,一切皆对象,包括数字等基本类型。

Ruby 的设计哲学和特性使其非常适合使用 Rails 进行 Web 开发。它的流行源于:

  • 可读性和简洁性:Ruby 的语法设计接近自然语言,使其相对容易学习和阅读。
  • 开源:在宽松的许可下可用,培养了一个庞大而活跃的社区。
  • 丰富的标准库和 Gems:拥有几乎所有任务所需的大量库(称为 ‘gems’)。
  • 元编程 (Metaprogramming):Ruby 允许程序编写或操作其他程序(或自身),Rails 大量利用这一点来减少样板代码。
  • 开发者幸福感 (Developer Happiness):这是 Ruby 社区的核心信条,专注于让开发变得愉快和高效。

考虑事项:

  • 性能:历史上,与其他编译型语言相比,Ruby 的执行速度曾是一个问题。然而,随着 Ruby 最新版本中 YJIT(Yet Another JIT Compiler,又一个 JIT 编译器)等技术的进步,Rails 应用的性能已显著提升。
  • 并发和并行:MRI(Matz 的 Ruby 解释器)中的全局解释器锁 (GIL) 意味着每个进程一次只能执行一个 Ruby 线程。但是,I/O 密集型操作可以释放 GIL,从而实现并发。对于 CPU 密集型任务,可以使用多进程架构(如 Puma Web 服务器使用的)或 Ractors 等实验性特性来实现并行。

这是一个简单的 Ruby 类:

# The Greeter Class
class Greeter
def initialize(name)
@name = name.capitalize
end
def salute
puts "Hello, #{@name}! Welcome to the world of Ruby."
end
end
# 创建一个新对象
g = Greeter.new("rubyist")
# 调用 salute 方法
g.salute

输出:

Hello, Rubyist! Welcome to the world of Ruby.

ERB (Embedded Ruby) 是一种模板系统,允许您将 Ruby 代码嵌入到文本文档中,最常见的是用于网页的 HTML 文件。Rails 在其视图模板中广泛使用 ERB。

ERB 使用特定的标签:

  • <% ... %>:执行标签内的 Ruby 代码。不会输出任何内容。
  • <%= ... %>:执行 Ruby 代码并输出表达式的结果。
  • <%# ... %>:注释标签;标签内的代码会被忽略。

示例 (template.html.erb):

<% page_title = "ERB 演示" %>
<% salutation = "尊敬的开发者," %>
<html>
<head>
<title><%= page_title %></title>
</head>
<body>
<p><%= salutation %></p>
<p>这是 ERB 模板如何在 Rails 视图中工作的示例。</p>
</body>
</html>

当 Rails 处理此 ERB 模板时,它将生成带有 Ruby 变量值插入的 HTML。

  • Ruby on Rails(通常简称“Rails”)是一个强大的 Web 应用框架,用 Ruby 编写。
  • 由 David Heinemeier Hansson (DHH) 创建。
  • 遵循模型-视图-控制器 (MVC) 架构模式。
  • 强调约定优于配置 (CoC) 和不要重复自己 (DRY) 原则。
  • 设计用于快速开发数据库驱动的 Web 应用。
  • 开源且拥有一个庞大而充满活力的社区。

Rails 是一个全栈框架,这意味着它为 Web 应用开发的各个层面提供了工具和库:

  • 数据库交互(通过 Active Record ORM)。
  • 路由(将 URL 映射到控制器动作)。
  • 控制器逻辑(处理请求和响应)。
  • 视图模板(使用 ERB、Slim、Haml 等生成 HTML)。
  • 静态资源管理(通过 Sprockets 或 Webpacker/Shakapacker 管理 CSS、JavaScript、图片)。
  • 后台作业(Active Job)。
  • 实时功能(Action Cable)。
  • 邮件发送(Action Mailer)。

Rails 对常见的命名约定做了假设(例如,一个 Book 模型通常映射到 books 数据库表)。通过遵循这些约定,开发者可以比许多其他框架少写大量配置代码。应用程序的结构和数据库模式通常为 Rails 提供了所需的所有信息。

Rails 提供了提升开发者生产力的特性:

Rails 利用 Ruby 的元编程能力来动态定义方法和行为,从而减少样板代码并使代码更具表现力。例如,Active Record 会自动为数据库列创建存取方法。

Rails 中的对象关系映射器(ORM)。它允许开发者将数据库表像 Ruby 对象一样进行交互,抽象化了大部分 SQL。Active Record 处理数据库连接、模式发现、CRUD 操作(增删查改)、关联关系 (associations)、数据校验 (validations) 等。

Rails 具有强大的测试文化。当您创建模型或控制器时,它会自动生成测试文件(默认使用 Minitest)。fixtures 或 factories(例如 FactoryBot)等工具帮助设置测试数据。RSpec 是另一种流行的测试框架。

Rails 提供了三个默认环境:development、test 和 production。每个环境都有针对其目的定制的略微不同的配置(例如,缓存行为、错误报告、使用的数据库),从而简化了开发生命周期。

Rails 可以生成“脚手架”——一套基本的模型、视图、控制器和路由,用于管理一个资源。这对于快速搭建 CRUD 界面、进行原型开发或学习 Rails 组件如何协同工作非常有用。