Ruby on Rails 开发实战:构建你的第一个项目 – wiki大全


Ruby on Rails 开发实战:构建你的第一个 Web 应用

Ruby on Rails (简称 Rails) 是一个功能强大且备受欢迎的 Web 应用框架,它基于 Ruby 语言构建。Rails 以其“约定优于配置”(Convention over Configuration) 和“不要重复自己”(Don’t Repeat Yourself, DRY) 的设计哲学而闻名,旨在让开发者能够快速、高效地构建复杂的网站。

本教程将带你从零开始,一步步创建一个完整的 Rails 项目:一个简单的博客系统。你将学习如何设置环境、创建项目、构建核心功能,并理解 Rails 的 MVC (Model-View-Controller) 架构。

1. 准备工作:安装必备工具

在开始之前,请确保你的电脑上安装了以下软件:

  • Ruby: Rails 是一个 Ruby gem (库),所以你需要先安装 Ruby。推荐使用版本管理工具如 rbenvRVM 来安装,这能让你轻松切换不同的 Ruby 版本。
  • Rails: 安装完 Ruby 后,在终端中运行以下命令来安装 Rails:
    bash
    gem install rails
  • 数据库: Rails 支持多种数据库。对于初学者,SQLite3 是最简单的选择,因为它无需额外安装和配置。对于生产环境,PostgreSQL 是更强大和推荐的选择。
  • 代码编辑器: 一个好的代码编辑器能极大提升效率,推荐使用 Visual Studio Code,并安装 Ruby 和 Rails 相关的扩展。
  • Git: 版本控制是现代软件开发的标配,请确保你已安装并配置好 Git。

2. 创建你的第一个 Rails 项目

万事俱备,让我们开始创建项目。打开终端,执行以下命令:

bash
rails new simple_blog

这个命令会创建一个名为 simple_blog 的文件夹,并自动生成 Rails 应用所需的所有文件和目录结构。

进入项目目录:

bash
cd simple_blog

现在,让我们启动 Rails 内置的 Web 服务器:

bash
rails server

或者使用缩写 rails s

打开你的浏览器,访问 http://localhost:3000。如果一切顺利,你会看到 Rails 的欢迎页面。这表明你的项目已经成功创建并运行起来了。

3. MVC 架构:Rails 的核心

在深入编码之前,理解 MVC 架构至关重要:

  • Model (模型): 负责与数据库交互,处理数据和业务逻辑。在 Rails 中,一个模型对应数据库中的一张表。
  • View (视图): 负责生成用户界面 (UI),通常是 HTML 页面。它从控制器获取数据并展示给用户。
  • Controller (控制器): 作为模型和视图之间的桥梁。它接收用户的请求,从模型获取数据,然后将数据传递给视图进行渲染。

4. 构建核心功能:文章 (Posts)

我们的博客需要有文章。我们将使用 Rails 的脚手架 (Scaffold) 功能来快速生成文章的 CRUD (创建、读取、更新、删除) 功能。

在终端中运行以下命令(确保你已停止 rails server):

bash
rails generate scaffold Post title:string body:text

这个命令告诉 Rails:
* generate scaffold: 生成一个完整的资源脚手架。
* Post: 资源名称是 “Post” (文章)。Rails 会自动将其映射到名为 Post 的模型和名为 posts 的数据库表。
* title:string: 文章有一个标题 (title),其数据类型是字符串 (string)。
* body:text: 文章有一个正文 (body),其数据类型是文本 (text),适合存储较长的内容。

这个命令会创建以下主要文件:
* app/models/post.rb: Post 模型文件。
* app/controllers/posts_controller.rb: Posts 控制器文件,包含了处理文章 CRUD 操作的所有方法。
* app/views/posts/: 存放文章相关视图文件的目录 (如 index.html.erb, show.html.erb 等)。
* db/migrate/xxxxxxxx_create_posts.rb: 一个数据库迁移文件,用于在数据库中创建 posts 表。
* config/routes.rb: 更新路由文件,添加了处理文章资源的路由规则。

5. 更新数据库

我们已经定义了 posts 表的结构(在迁移文件中),现在需要执行迁移来让数据库更新:

bash
rails db:migrate

这个命令会执行所有尚未执行的迁移文件,在数据库中创建 posts 表,并添加 titlebody 两个字段。

6. 探索你的博客应用

现在,重新启动 Rails 服务器:

bash
rails server

然后,在浏览器中访问 http://localhost:3000/posts

你会看到一个简单的文章列表页面。尝试以下操作:
* 点击 “New post” 按钮,创建一个新的文章。
* 创建后,你会跳转到文章的详情页。
* 返回列表页,点击 “Edit” 来修改文章。
* 点击 “Destroy” 来删除文章。

恭喜你!你已经拥有了一个功能齐全的博客系统。这一切都归功于 Rails 的脚手架功能。

7. 添加关联:评论 (Comments)

一个博客不能没有评论功能。让我们来为文章添加评论。

首先,生成一个 Comment 模型,并将其与 Post 模型关联起来:

bash
rails generate model Comment body:text post:references

这个命令会:
* 创建一个 Comment 模型。
* 它有一个 body 字段。
* post:references 是一个特殊的指令,它会自动在 comments 表中添加一个 post_id 字段,并设置好数据库索引和外键。这用于表明一条评论“属于”一篇文章。

接下来,我们需要手动设置模型之间的关联关系:

  1. 打开 app/models/post.rb,添加 has_many :comments。这表示一篇文章可以拥有多条评论。为了让删除文章时能同时删除其所有评论,我们加上 dependent: :destroy
    ruby
    class Post < ApplicationRecord
    has_many :comments, dependent: :destroy
    validates :title, presence: true
    end

    (我们还顺便为 Post 模型添加了一个验证,要求标题不能为空)

  2. 打开 app/models/comment.rb,Rails 的生成器应该已经自动添加了 belongs_to :post。这表示一条评论属于一篇文章。

现在,再次运行数据库迁移来创建 comments 表:

bash
rails db:migrate

8. 配置嵌套路由

为了让评论的 URL 看起来更直观 (例如 posts/1/comments/new),我们需要配置嵌套路由

打开 config/routes.rb 文件,将 resources :posts 修改为:

ruby
Rails.application.routes.draw do
resources :posts do
resources :comments
end
root "posts#index" # 将根路径设置为文章列表页
end

resources :comments 嵌套在 resources :posts 内部,为我们生成了评论相关的路由。我们还添加了 root "posts#index",这样访问 http://localhost:3000 时会直接显示文章列表。

9. 创建评论控制器和视图

我们需要一个地方来处理创建评论的逻辑。

  1. 创建控制器:
    bash
    rails generate controller Comments

  2. 编辑 app/controllers/comments_controller.rb,添加 createdestroy 方法:
    “`ruby
    class CommentsController < ApplicationController
    def create
    @post = Post.find(params[:post_id])
    @comment = @post.comments.create(comment_params)
    redirect_to post_path(@post)
    end

    def destroy
    @post = Post.find(params[:post_id])
    @comment = @post.comments.find(params[:id])
    @comment.destroy
    redirect_to post_path(@post), status: :see_other
    end

    private
    def comment_params
    params.require(:comment).permit(:body)
    end
    end
    “`

  3. 在文章详情页显示评论并添发表单:
    打开 app/views/posts/show.html.erb,在文件末尾添加以下代码:

    “`erb
    <%# — 在文件末尾添加以下内容 — %>

    Comments

    <% @post.comments.each do |comment| %>

    Comment:
    <%= comment.body %>

    <%= link_to “Delete Comment”, [comment.post, comment], data: {
    turbo_method: :delete,
    turbo_confirm: “Are you sure?”
    } %>

    <% end %>

    Add a comment:

    <%= form_with(model: [ @post, @post.comments.build ]) do |form| %>

    <%= form.label :body %>
    <%= form.text_area :body %>

    <%= form.submit %>

    <% end %>
    “`

现在,刷新你的文章详情页。你会看到一个用于添加评论的表单和已存在的评论列表。尝试添加和删除几条评论,你会发现一切都已正常工作!

总结与下一步

通过本教程,你已经:
* 成功搭建了 Rails 开发环境。
* 创建并运行了一个 Rails 项目。
* 使用脚手架快速构建了文章的 CRUD 功能。
* 理解并实践了模型之间的 has_many / belongs_to 关联。
* 配置了嵌套路由来组织 URL。
* 手动创建了控制器和视图来处理评论功能。

这只是 Rails 世界的冰山一角。接下来,你可以探索更多有趣的功能:
* 用户认证: 使用 Devise gem 为你的博客添加用户注册和登录功能。
* 美化界面: 学习使用 CSS 框架如 BootstrapTailwind CSS 来美化你的应用。
* 部署上线: 将你的应用部署到 RenderHeroku 等云平台,让全世界都能访问你的作品。

继续探索,享受使用 Rails 构建应用的乐趣吧!

滚动至顶部