快速上手Ruby on Rails:初学者友好的一站式指南
Ruby on Rails(简称Rails)是一个功能强大且极受欢迎的Web应用框架,它基于Ruby语言构建。Rails以其“约定优于配置”(Convention over Configuration)和“不要重复自己”(Don’t Repeat Yourself)的哲学而闻名,旨在让开发者能够快速、高效地构建出强大的Web应用。本指南将带你从零开始,一步步进入Rails的世界。
目录
1. 什么是Ruby on Rails?
Rails是一个基于模型-视图-控制器(MVC)架构模式的开源Web框架。
- 模型(Model): 负责与数据库交互,处理业务逻辑和数据验证。
- 视图(View): 负责生成用户界面,将数据显示给用户。通常是HTML、CSS和JavaScript的组合。
- 控制器(Controller): 作为模型和视图之间的协调者,接收用户请求,调用相应的模型逻辑,并将结果传递给视图。
Rails的哲学使得开发者可以专注于业务逻辑,而不是繁琐的配置。它内置了大量工具和库,覆盖了从数据库迁移到发送邮件等Web开发的方方面面。
2. 环境准备与安装
在开始之前,你需要搭建好开发环境。
第一步:安装Ruby
Rails是基于Ruby的,所以首先需要安装Ruby。强烈建议使用版本管理工具来安装,这能让你轻松切换不同项目的Ruby版本。
-
对于macOS或Linux: 推荐使用
rbenv或RVM。
“`bash
# 使用 rbenv (推荐)
git clone https://github.com/rbenv/rbenv.git ~/.rbenv
echo ‘export PATH=”$HOME/.rbenv/bin:$PATH”‘ >> ~/.bashrc # 或 ~/.zshrc
echo ‘eval “$(rbenv init -)”‘ >> ~/.bashrc # 或 ~/.zshrc
source ~/.bashrc # 或 source ~/.zshrcgit clone https://github.com/rbenv/ruby-build.git “$(rbenv root)”/plugins/ruby-build
安装指定版本的Ruby
rbenv install 3.2.2
rbenv global 3.2.2
``RubyInstaller`,它提供了一个完整的Ruby开发环境。
* **对于Windows**: 可以使用
安装后,通过 ruby -v 确认版本。
第二步:安装Rails
安装好Ruby后,就可以通过Ruby的包管理器RubyGems来安装Rails了。
bash
gem install rails
安装完成后,通过 rails -v 确认Rails版本。
第三步:安装数据库
Rails默认使用SQLite3,这是一个轻量级的数据库,无需单独安装服务器,非常适合开发环境。如果想使用更强大的数据库,如PostgreSQL或MySQL,则需要单独安装它们。
3. 创建你的第一个Rails应用
环境就绪,让我们来创建第一个应用!
第一步:生成项目
打开终端,运行以下命令:
bash
rails new my_first_app
这个命令会创建一个名为 my_first_app 的文件夹,并自动安装所有必需的依赖(Gems)。
进入项目目录:
bash
cd my_first_app
你会看到一个标准的Rails项目结构:
* app/: 包含模型、视图、控制器和静态资源,是你的主要工作目录。
* config/: 存放应用的配置文件,如路由(routes.rb)。
* db/: 包含数据库结构定义(schema)和迁移文件(migrations)。
* Gemfile: 定义项目依赖的Ruby库(Gems)。
第二步:启动服务器
Rails内置了一个Web服务器。在项目根目录下运行:
“`bash
bin/rails server
或者简写
rails s
“`
现在,打开浏览器访问 http://127.0.0.1:3000 或 http://localhost:3000。你会看到Rails的欢迎页面,这表示你的应用已经成功运行了!
4. Rails核心概念:构建一个简单的博客
理论不如实践。让我们通过构建一个简单的博客来掌握Rails的MVC流程。这个博客将支持文章(Articles)的创建、查看、编辑和删除(CRUD)。
4.1 创建模型(Model)
我们首先需要一个Article模型来表示一篇文章,它应该有标题(title)和内容(body)。
运行Rails的代码生成器:
bash
bin/rails generate model Article title:string body:text
这个命令会做几件事:
1. 创建一个app/models/article.rb文件,这是Article模型类。
2. 创建一个db/migrate/目录下的迁移文件。迁移文件像数据库的版本控制,用于描述数据库表的变更。
打开新生成的迁移文件,它看起来像这样:
“`ruby
class CreateArticles < ActiveRecord::Migration[7.0]
def change
create_table :articles do |t|
t.string :title
t.text :body
t.timestamps
end
end
end
“`
现在,运行迁移来让数据库真正创建articles表:
bash
bin/rails db:migrate
4.2 设置路由(Routes)
当用户请求一个URL时,Rails的路由需要知道该将请求分派给哪个控制器的哪个动作。打开 config/routes.rb 文件,添加一行代码:
“`ruby
Rails.application.routes.draw do
# 将根路径’/’指向articles控制器的index动作
root “articles#index”
# 这行代码会自动为articles生成所有标准的RESTful路由
resources :articles
end
``resources :articles是一个强大的助手,它会自动创建用于浏览、显示、新建、编辑、更新和删除文章的所有路由。你可以通过运行bin/rails routes` 查看所有已定义的路由。
4.3 创建控制器(Controller)
接下来,创建ArticlesController来处理与文章相关的逻辑。
bash
bin/rails generate controller Articles
这会生成 app/controllers/articles_controller.rb。现在我们来填充它:
“`ruby
class ArticlesController < ApplicationController
# 显示所有文章
def index
@articles = Article.all
end
# 显示单篇文章
def show
@article = Article.find(params[:id])
end
# 显示新建文章的表单
def new
@article = Article.new
end
# 创建新文章
def create
@article = Article.new(article_params)
if @article.save
redirect_to @article
else
render :new, status: :unprocessable_entity
end
end
# 显示编辑文章的表单
def edit
@article = Article.find(params[:id])
end
# 更新文章
def update
@article = Article.find(params[:id])
if @article.update(article_params)
redirect_to @article
else
render :edit, status: :unprocessable_entity
end
end
# 删除文章
def destroy
@article = Article.find(params[:id])
@article.destroy
redirect_to root_path, status: :see_other
end
private
# 使用Strong Parameters来防止恶意用户提交额外的表单字段
def article_params
params.require(:article).permit(:title, :body)
end
end
``@
**注意**:开头的变量(如@article`)是实例变量,它们可以在对应的视图文件中被访问。
4.4 创建视图(Views)
视图负责展示数据。我们需要为控制器的每个动作创建对应的ERB(Embedded Ruby)文件。
-
显示所有文章 (
app/views/articles/index.html.erb)
“`erb文章列表
<%= link_to “新建文章”, new_article_path %>
-
<% @articles.each do |article| %>
- <%= link_to article.title, article %>
<% end %>
“`
-
显示单篇文章 (
app/views/articles/show.html.erb)
“`erb<%= @article.title %>
<%= @article.body %>
<%= link_to “编辑”, edit_article_path(@article) %> |
<%= link_to “返回列表”, root_path %> |
<%= link_to “删除”, article_path(@article), data: {
turbo_method: :delete,
turbo_confirm: “确定要删除吗?”
} %>``turbo_method: :delete` 是Rails 7+中用于实现删除功能的方式。*
* -
新建/编辑表单 (抽取为局部视图
app/views/articles/_form.html.erb)
为了遵循DRY原则,我们将新建和编辑共用的表单抽取出来。“`erb
<%= form_with model: article do |form| %><%= form.label :title %>
<%= form.text_field :title %><%= form.label :body %>
<%= form.text_area :body %><%= form.submit %><% end %>
“` -
新建文章页面 (
app/views/articles/new.html.erb)
erb
<h1>新建文章</h1>
<%= render "form", article: @article %> -
编辑文章页面 (
app/views/articles/edit.html.erb)
erb
<h1>编辑文章</h1>
<%= render "form", article: @article %>
现在,再次启动服务器 (bin/rails server),访问 http://localhost:3000。你应该能看到一个功能完整的博客应用了!尝试创建、查看、编辑和删除文章,体验一下完整的MVC流程。
5. 常用工具与下一步
- Rails Console: 一个强大的交互式命令行工具。通过
bin/rails console(或rails c)启动,你可以在这里直接与你的应用代码和数据库交互。例如,Article.all可以查询所有文章。 - Gems: Rails的生态系统核心是Gems。你可以在
Gemfile中声明你需要的库,然后运行bundle install来安装它们。一些流行的Gems包括:Devise: 用于快速实现用户认证(注册、登录)。Pundit: 用于处理授权和访问控制。Sidekiq: 用于处理后台任务。
- 学习资源:
6. 结语
恭喜你!你已经成功构建了第一个Rails应用,并对Rails的MVC架构有了初步的了解。Rails的强大之处在于其约定和丰富的生态系统,它能让你以极高的效率将想法变为现实。继续探索,享受用Rails创造的乐趣吧!