Ruby on Rails 教程:从零开始 – wiki基地


Ruby on Rails 教程:从零开始构建你的第一个Web应用

Ruby on Rails(简称Rails)是一个使用Ruby语言编写的开源Web应用框架。它以“约定优于配置”(Convention Over Configuration)和“不要重复自己”(Don’t Repeat Yourself, DRY)的原则而闻名,极大地提高了Web开发的效率和乐趣。本教程将引导你从零开始,逐步构建一个简单的Rails应用,让你对Rails的核心概念有一个全面的了解。

1. 为什么选择 Ruby on Rails?

在深入之前,我们先了解一下Rails的优势:

  • 开发效率高:大量的约定和内置工具,让开发者能够快速搭建应用原型和交付功能。
  • 社区活跃:拥有庞大而热情的社区,提供丰富的文档、插件(Gem)和支持。
  • 优雅的语法:Ruby语言本身具有很高的可读性和表达力,使代码更易于理解和维护。
  • 全栈框架:集成了前端(HTML, CSS, JavaScript)、后端(Ruby)、数据库(ORM)等所有Web开发所需组件。
  • 遵循最佳实践:鼓励开发者采用MVC(Model-View-Controller)架构,测试驱动开发(TDD)等行业最佳实践。

2. 准备工作:安装环境

在开始Rails开发之前,你需要安装以下软件:

  • Ruby:Rails框架是基于Ruby语言的。
  • Rails:Rails框架本身。
  • 数据库:通常是SQLite3(开发环境默认)、PostgreSQL或MySQL。
  • Node.js & Yarn:Rails 6+ 依赖它们管理前端资产。

安装步骤 (以macOS/Linux为例,Windows用户建议使用WSL2):

  1. 安装 RVM 或 rbenv (Ruby版本管理器,推荐)

    • RVM:
      bash
      gpg --keyserver hkp://keys.gnupg.net --recv-keys 409B6B1796C275462A1703113804BB82D39DC0E3 7D2BAF1CE0EE8953ADF71AEC6D5A2DCF0C3B3E08
      \curl -sSL https://get.rvm.io | bash -s stable --ruby
      source ~/.rvm/scripts/rvm # 将此行添加到 .bashrc 或 .zshrc
    • rbenv:
      bash
      brew install rbenv ruby-build # macOS
      # 对于Linux,请参考rbenv官方文档安装
      echo 'eval "$(rbenv init -)"' >> ~/.bashrc # 或 ~/.zshrc
      source ~/.bashrc # 或 ~/.zshrc
  2. 安装 Ruby (使用版本管理器)

    • 使用RVM:
      bash
      rvm install 3.2.2 # 安装一个最新稳定版本,例如 3.2.2
      rvm use 3.2.2 --default
    • 使用rbenv:
      bash
      rbenv install 3.2.2
      rbenv global 3.2.2
    • 验证Ruby安装: ruby -v
  3. 安装 Rails
    bash
    gem install rails -v 7.1.3 # 安装一个最新稳定版本,例如 7.1.3

    • 验证Rails安装: rails -v
  4. 安装 Node.js 和 Yarn

    • macOS: brew install node yarn
    • Linux: 请参考官方文档安装 Node.js 和 Yarn。
    • 验证: node -v, yarn -v

3. 创建你的第一个Rails应用

现在我们来创建一个名为 blog 的应用。

bash
rails new blog
cd blog

这个命令会生成一个完整的Rails应用骨架。你会看到许多文件和目录。一些重要的目录包括:

  • app/:应用的核心代码,包含模型(models)、视图(views)、控制器(controllers)。
  • config/:配置文件,如路由(routes)、数据库连接(database.yml)。
  • db/:数据库相关文件,如迁移(migrations)和种子数据(seeds)。
  • public/:静态文件,如图片、JavaScript、CSS。

启动Rails服务器:

bash
rails server

在浏览器中访问 http://localhost:3000,如果看到“Yay! You’re on Rails!”页面,说明你的应用已成功运行。

4. Rails核心概念:MVC架构

Rails严格遵循MVC(Model-View-Controller)架构模式。

  • Model (模型):负责数据和业务逻辑。它们与数据库交互(如保存、读取、更新、删除数据),并定义数据验证规则。在Rails中,模型通常继承自 ActiveRecord::Base
  • View (视图):负责数据的展示。它们接收控制器传递的数据,并渲染成用户界面(通常是HTML)。Rails视图使用ERB(Embedded Ruby)模板语言。
  • Controller (控制器):负责处理用户请求。它接收来自路由的请求,与模型交互获取数据,然后将数据传递给视图进行展示。

5. 构建博客应用:创建文章资源

我们的博客应用将允许用户创建、查看、编辑和删除文章。在Rails中,我们称之为“资源”。

5.1 生成文章资源

Rails提供了强大的生成器来自动化创建代码。我们将使用 scaffold 生成器来快速构建文章的所有MVC组件:

bash
rails generate scaffold Article title:string content:text

这个命令做了很多事情:

  • 创建了一个 Article 模型,包含 title (字符串) 和 content (文本) 字段。
  • 创建了一个 articles_controller.rb 控制器,包含处理CRUD操作的动作。
  • 创建了与文章相关的视图文件(index, show, new, edit 表单)。
  • 创建了一个数据库迁移文件,用于在数据库中创建 articles 表。
  • 更新了 config/routes.rb 文件,添加了文章资源的路由。

5.2 运行数据库迁移

现在我们需要将新创建的 articles 表应用到数据库中:

bash
rails db:migrate

这个命令会根据迁移文件修改你的数据库结构。

5.3 查看效果

现在你可以在浏览器中访问 http://localhost:3000/articles。你将看到一个基本的文章列表页面,你可以点击“New Article”来创建新文章,并进行编辑和删除操作。这证明了 scaffold 的强大之处,它在几秒钟内提供了一个功能完整的CRUD界面。

6. 理解路由 (Routing)

config/routes.rb 文件定义了URL如何映射到控制器动作。

打开 config/routes.rb,你会看到类似这样的代码:

“`ruby
Rails.application.routes.draw do
resources :articles
# Define your application routes per the DSL in https://guides.rubyonrails.org/routing.html

# Reveal health status on /up that returns 200 if the app boots with no exceptions, otherwise 500.
# Can be used by load balancers and uptime monitors to verify that the app is live.
get “up” => “rails/health#show”, as: :rails_health_check

# Defines the root path route (“/”)
# root “posts#index”
end
“`

resources :articles 这一行是 Rails 的路由 DSL (Domain Specific Language),它会自动为 articles 资源生成7个RESTful路由:

HTTP 方法 路径 控制器动作 作用
GET /articles articles#index 列出所有文章
GET /articles/:id articles#show 显示单篇文章
GET /articles/new articles#new 新建文章表单
POST /articles articles#create 创建新文章
GET /articles/:id/edit articles#edit 编辑文章表单
PATCH/PUT /articles/:id articles#update 更新文章
DELETE /articles/:id articles#destroy 删除文章

你也可以定义根路径:

ruby
root "articles#index" # 设置应用的根路径为文章列表页

现在访问 http://localhost:3000 就会直接跳转到文章列表页。

7. 深入模型 (Model)

打开 app/models/article.rb

ruby
class Article < ApplicationRecord
validates :title, presence: true, length: { minimum: 5 }
validates :content, presence: true
end

这里我们添加了数据验证 (Validations):

  • validates :title, presence: true, length: { minimum: 5 }:标题不能为空,且长度至少为5个字符。
  • validates :content, presence: true:内容不能为空。

这些验证会在保存文章到数据库之前自动运行。如果验证失败,article.save 会返回 false,并且 article.errors 会包含详细的错误信息。

8. 理解控制器 (Controller)

打开 app/controllers/articles_controller.rb。你会看到许多动作(方法),例如 index, show, new, create, edit, update, destroy

create 动作为例:

“`ruby

POST /articles

def create
@article = Article.new(article_params) # 创建新文章对象
if @article.save # 尝试保存文章到数据库
redirect_to @article, notice: “Article was successfully created.” # 保存成功,重定向到文章详情页
else
render :new, status: :unprocessable_entity # 保存失败,重新渲染新建表单,并显示错误
end
end

private
# Only allow a list of trusted parameters through.
def article_params
params.require(:article).permit(:title, :content)
end
“`

  • @article = Article.new(article_params):创建一个新的 Article 实例,并使用 article_params 方法过滤用户提交的参数。这被称为“强参数”(Strong Parameters),是Rails的安全特性,防止恶意用户提交未经允许的参数。
  • @article.save:尝试将文章保存到数据库。如果模型验证失败,此方法会返回 false
  • redirect_to @article:重定向到刚刚创建的文章的详情页(show 动作)。
  • render :new:如果保存失败,重新渲染 new 视图,以便用户可以修正错误。status: :unprocessable_entity 设定HTTP状态码为422,告知浏览器请求由于语义错误无法处理。

9. 视图 (View) 基础

视图文件位于 app/views/articles/ 目录下。它们使用ERB模板(以 .html.erb 结尾)。

例如,app/views/articles/index.html.erb 显示文章列表:

“`html+erb

Articles

<% @articles.each do |article| %>
<%= render article %>
<% end %>

<%= link_to “New article”, new_article_path %>
“`

这里:

  • <% @articles.each do |article| %> ... <% end %> 是Ruby代码块,用于遍历控制器传来的 @articles 集合。
  • <%= render article %> 是一个局部视图渲染的例子。Rails会查找 _article.html.erb 文件来渲染单个 article 对象。
  • <%= link_to "New article", new_article_path %> 是一个Rails助手方法,用于生成HTML链接。new_article_path 是由 resources :articles 路由自动生成的路径助手。

打开 app/views/articles/_article.html.erb,你会看到渲染单篇文章的代码:

“`html+erb

“`

10. 部署 (Deployment)

当你的Rails应用开发完成后,你可能需要将其部署到生产环境。常见的部署平台包括:

  • Heroku:简单易用,适合初学者快速部署。
  • Render:现代化的云平台,支持多种语言和数据库。
  • Capistrano:一个Ruby Gem,用于自动化部署到自己的服务器。
  • AWS / Google Cloud / Azure:更灵活但也更复杂的云服务。

部署涉及到数据库配置、环境变量设置、资产编译等步骤,具体方法会因平台而异。

11. 接下来学习什么?

恭喜你,你已经迈出了Rails开发的第一步!为了进一步提升你的技能,你可以学习以下主题:

  • 数据库关联 (Associations):如 has_many, belongs_to 等,用于建立模型之间的关系(例如,一篇文章可以有多个评论)。
  • 用户认证与授权 (Authentication & Authorization):使用 Devise 等Gem来处理用户注册、登录和权限管理。
  • Action Text & Active Storage:Rails内置的富文本编辑器和文件上传解决方案。
  • JavaScript 与前端集成 (Hotwire / React / Vue):Rails 7 默认使用 Hotwire 栈 (Turbo 和 Stimulus) 实现交互性,你也可以集成其他前端框架。
  • 测试 (Testing):学习如何编写单元测试、集成测试和系统测试,确保代码质量。
  • 背景任务 (Background Jobs):使用 SidekiqGoodJob 处理耗时任务,如发送邮件。
  • API 开发:将Rails应用作为API后端,供移动应用或SPA(Single Page Application)调用。

总结

Ruby on Rails是一个强大、高效且令人愉悦的Web开发框架。通过遵循“约定优于配置”的原则,它让开发者能够专注于业务逻辑,而不是繁琐的配置。本教程只是一个起点,但希望能为你打开Rails世界的大门,助你从零开始,逐步成为一名熟练的Rails开发者!祝你编程愉快!


滚动至顶部