Ruby on Rails 教程:从零开始构建你的第一个 Web 应用
前言
欢迎来到 Ruby on Rails 的世界!Rails 是一个使用 Ruby 语言编写的开源 Web 应用框架。它遵循“约定优于配置”(Convention over Configuration)和“不要重复自己”(Don’t Repeat Yourself)的设计哲学,旨在让 Web 开发变得更加轻松、高效和有趣。
自 2004 年发布以来,Rails 凭借其强大的功能和优雅的设计,迅速成为 Web 开发领域的宠儿。许多知名的网站,如 GitHub, Airbnb, Shopify, 和 Basecamp,都是使用 Rails 构建的。即使在今天,Rails 依然是一个成熟、稳定且充满活力的框架,拥有庞大的社区和丰富的生态系统,非常适合初创公司和大型企业快速构建高质量的 Web 应用。
在本教程中,我们将从零开始,一步步构建一个功能齐全的博客应用。你将学习到 Rails 的核心概念,包括 MVC 架构、RESTful 设计、数据库迁移、路由、视图模板等。
学习本教程需要你具备以下基础知识:
- 了解 HTML, CSS 和 JavaScript 的基本语法。
- 对命令行操作有基本了解。
- 有其他编程语言的经验会很有帮助,但并非必需。
准备好了吗?让我们开始 Rails 之旅吧!
第一部分:搭建开发环境
在开始编写代码之前,我们需要先在本地搭建好 Rails 的开发环境。
1. 安装 Ruby
Rails 是基于 Ruby 的,所以我们首先需要安装 Ruby。我们推荐使用版本管理工具来安装和管理 Ruby,这样可以方便地在不同版本的 Ruby 之间切换。
- macOS 或 Linux 用户 可以使用
rbenv或RVM。 - Windows 用户 可以使用
RailsInstaller或WSL (Windows Subsystem for Linux)来搭建一个类 Linux 的开发环境。
以 rbenv 为例,你可以按照以下步骤安装 Ruby:
“`bash
安装 rbenv
brew install rbenv ruby-build
初始化 rbenv
rbenv init
安装指定版本的 Ruby (推荐使用最新稳定版)
rbenv install 3.2.2
rbenv global 3.2.2
“`
安装完成后,可以通过以下命令验证 Ruby 是否安装成功:
“`bash
ruby -v
ruby 3.2.2p53 (2023-04-12 revision e51014f9c0) [x86_64-darwin22]
“`
2. 安装 Rails
安装好 Ruby 之后,我们就可以使用 RubyGems(Ruby 的包管理器)来安装 Rails 了。
bash
gem install rails
安装完成后,可以通过以下命令验证 Rails 是否安装成功:
“`bash
rails -v
Rails 7.1.3
“`
3. 安装数据库
Rails 支持多种数据库,包括 SQLite, PostgreSQL, MySQL 等。对于开发环境,我们推荐使用 SQLite,因为它配置简单,无需单独安装和配置数据库服务器。在生产环境中,则更推荐使用功能更强大的 PostgreSQL 或 MySQL。
第二部分:创建你的第一个 Rails 应用
1. 创建新项目
现在我们已经搭建好了开发环境,可以开始创建我们的第一个 Rails 应用了。打开终端,进入你想要存放项目的目录,然后运行以下命令:
bash
rails new blog
这个命令会创建一个名为 blog 的新目录,并在其中生成一个完整的 Rails 应用骨架。
2. 项目目录结构
让我们来看一下 rails new 命令为我们生成的项目目录结构:
app/: 包含应用的核心代码,如模型(models)、视图(views)、控制器(controllers)、帮助方法(helpers)和静态资源(assets)。bin/: 包含应用的启动脚本,如rails,rake,bundle。config/: 包含应用的配置文件,如数据库配置(database.yml)、路由配置(routes.rb)等。db/: 包含数据库相关的文件,如数据库迁移(migrations)和数据填充(seeds)。Gemfile: 定义了项目所依赖的 Ruby gems。Gemfile.lock: 记录了项目实际使用的 gems 及其版本。log/: 包含应用的日志文件。public/: 包含静态文件,如错误页面。storage/: 包含 Active Storage 上传的文件。test/: 包含应用的测试代码。tmp/: 包含临时文件。vendor/: 包含第三方的代码。
3. 启动服务器
进入项目目录,然后启动 Rails 服务器:
bash
cd blog
bin/rails server
现在,打开浏览器,访问 http://localhost:3000,你应该能看到 Rails 的欢迎页面。
第三部分:构建博客文章功能
1. MVC 架构简介
Rails 遵循经典的 MVC(Model-View-Controller)架构模式:
- Model (模型): 负责与数据库进行交互,处理应用的业务逻辑。
- View (视图): 负责生成用户界面,将数据显示给用户。
- Controller (控制器): 负责接收用户的请求,调用模型和视图,并向用户返回响应。
2. 使用脚手架快速生成代码
Rails 提供了强大的脚手架(scaffold)功能,可以帮助我们快速生成一套完整的 CRUD (Create, Read, Update, Delete) 功能。
运行以下命令,生成 Post 模型、控制器和视图:
bash
bin/rails generate scaffold Post title:string body:text
这个命令会生成以下主要文件:
db/migrate/YYYYMMDDHHMMSS_create_posts.rb: 数据库迁移文件,用于创建posts表。app/models/post.rb:Post模型文件。app/controllers/posts_controller.rb:Posts控制器文件。app/views/posts/: 包含Post相关的视图文件。config/routes.rb: 在路由文件中添加了resources :posts。
3. 运行数据库迁移
运行以下命令,执行数据库迁移,创建 posts 表:
bash
bin/rails db:migrate
4. 体验博客功能
现在,重启 Rails 服务器,然后在浏览器中访问 http://localhost:3000/posts,你将看到一个功能齐全的博客文章管理界面。你可以尝试新建、查看、编辑和删除文章。
第四部分:深入理解 Rails
脚手架为我们生成了很多代码,现在让我们来深入了解一下这些代码的含义。
1. 路由
打开 config/routes.rb 文件,你会看到一行 resources :posts。这行代码会自动为我们生成一组符合 RESTful 规范的路由,用于处理对文章资源的各种操作。
你可以在终端运行 bin/rails routes 命令,查看所有可用的路由。
2. 控制器
打开 app/controllers/posts_controller.rb 文件,你会看到一个 PostsController 类,其中包含了一系列的方法,如 index, show, new, create, edit, update, destroy。这些方法被称为 action,分别对应着对文章资源的不同操作。
3. 模型
打开 app/models/post.rb 文件,你会看到一个空的 Post 类。我们可以在这里添加数据验证、关联关系等业务逻辑。
例如,我们可以添加验证,确保文章的标题和内容不能为空:
ruby
class Post < ApplicationRecord
validates :title, presence: true
validates :body, presence: true
end
4. 视图
打开 app/views/posts/ 目录,你会看到一系列的 .html.erb 文件。这些是视图模板文件,用于生成 HTML 页面。.erb 表示这是一个嵌入了 Ruby 代码的 HTML 文件。
第五部分:添加评论功能
1. 创建评论模型
一个博客应用怎么能没有评论功能呢?让我们来为文章添加评论功能。
首先,创建一个 Comment 模型,并将其与 Post 模型关联起来:
bash
bin/rails generate model Comment post:references body:text
这个命令会生成一个 Comment 模型,并添加一个 post_id 字段,用于关联到 posts 表。
2. 定义模型关联
打开 app/models/post.rb 文件,添加 has_many :comments:
ruby
class Post < ApplicationRecord
has_many :comments
validates :title, presence: true
validates :body, presence: true
end
打开 app/models/comment.rb 文件,belongs_to :post 已经被自动添加好了:
ruby
class Comment < ApplicationRecord
belongs_to :post
end
3. 运行数据库迁移
bash
bin/rails db:migrate
4. 添加嵌套路由
为了让评论的 URL 看起来更清晰(如 /posts/1/comments),我们需要在 config/routes.rb 文件中添加嵌套路由:
ruby
Rails.application.routes.draw do
resources :posts do
resources :comments
end
end
5. 创建评论控制器
bash
bin/rails generate controller Comments
6. 实现评论功能
现在,我们需要在 CommentsController 中实现创建和删除评论的功能,并在文章的详情页面 (app/views/posts/show.html.erb) 添加评论表单和评论列表。
这部分涉及到更多的代码编写,你可以参考 Rails 官方文档或其他教程来完成这部分功能。
第六部分:后续学习
恭喜你!你已经成功地构建了你的第一个 Rails 应用。当然,这仅仅是一个开始,Rails 的世界还有很多精彩的内容等待你去探索。
以下是一些你可以继续学习的方向:
- 用户认证: 使用 Devise 等 gem 为你的应用添加用户注册和登录功能。
- 文件上传: 使用 Active Storage 实现文件上传功能。
- 前端框架集成: 将 React, Vue 或 Stimulus 等前端框架集成到你的 Rails 应用中。
- 测试: 学习编写测试代码,确保你的应用质量。
- 部署: 将你的应用部署到 Heroku, Render 等云平台。
总结
在本教程中,我们学习了如何使用 Ruby on Rails 从零开始构建一个 Web 应用。我们了解了 Rails 的基本概念、核心组件和开发流程。希望本教程能为你打开 Rails 开发的大门,让你感受到 Rails 的强大和魅力。
继续学习,不断实践,你也能成为一名优秀的 Rails 开发者!