Rails 7 开发总结(上)

1. MVC

Rails 采用 MVC 架构

MVC 部分引用于:ihower.tw/rails/basic...

  1. 瀏覽器發出HTTP request 請求給Rails
  2. 路由(Routing)根據規則決定派往哪一個ControllerAction
  3. 負責處理的Controller Action 操作Model資料
  4. Model存取資料庫或資料處理
  5. Controller Action 將得到的資料餵給View樣板
  6. 回傳最後的HTML成品給瀏覽器

2. 创建 API 服务

以 PostgreSQL 为数据库,创建一个API服务。

bash 复制代码
rails new --api --database=postgresql --skip-test x-api

3. 使用 Docker 创建数据库

bash 复制代码
docker run -d --name db-for-rb \ # 容器名称/DB_HOST
           -e POSTGRES_USER=root \ # 用户名
           -e POSTGRES_PASSWORD=123456 \ # 密码
           -e POSTGRES_DB=rb_dev \ # 数据库
           -e PGDATA=/var/lib/postgresql/data/pgdata \ # 指定数据存储目录
           -v rb-data:/var/lib/postgresql/data \ # 数据卷(数据持久化)
           -p 5434:5432 \ # 端口映射(本机的5434映射到容器中的5432)
           --network=network2 \ # 网络,用于服务桥接
           postgres:14 # 镜像:版本

在 PostgreSQL 中,PGDATA 是一个环境变量,用于指定数据库引擎存储数据的目录路径。在这个命令中,将 PGDATA 设置为 /var/lib/postgresql/data/pgdata,这意味着 PostgreSQL 容器将使用容器内的 /var/lib/postgresql/data/pgdata 目录作为数据存储目录。

持久化的数据(rb-data)在 docker 的 Volumes 中可以看到:

4. 配置 config/database.yml

yml 复制代码
development:
  <<: *default
  database: rb_dev
  username: root
  password: 123456
  host: localhost
  port: 5434


production:
  <<: *default
  database: rb_production
  username: root
  password: <%= ENV["DB_PASSWORD"] %>
  host: <%= ENV["DB_HOST"] %>

生产环境的password和host从环境变量中读取,环境变量一般保存在.bashrc中。

5. 启动服务

运行服务器后,可以启动 Rails 服务了。

bash 复制代码
rails s

6. 创建路由

6.1 设计路由

在config/routes.rb中设计路由,例如:/api/v1/

ruby 复制代码
Rails.application.routes.draw do
  namespace :api do
    namespace :v1 do
      post '/auth_codes', to: 'auth_codes#create'

      resources :users
      get '/me', to: 'users#me'
      post '/login', to: 'users#login'

      resources :posts, only: [:index, :show, :create, :update, :destroy]

      resources :comments
      patch '/update_multiple', to: 'comments#update_multiple'

      resources :likes, only: [:create, :destroy]
    end
  end
end
  • index:GET 检索所有资源
  • show:GET 检索某一个
  • create:POST 创建新资源
  • update:PATCH 更新资源
  • destroy:DELETE 删除资源

6.2 生成路由

然后,根据config/routes.rb生成路由:

bash 复制代码
rails routes

7. 数据库操作

7.1 创建数据库

bash 复制代码
rails db:create
rails db:create RAILS_ENV=production # 生产环境

7.2 迁移数据库

bash 复制代码
rails db:migrate

7.3 回滚数据库

bash 复制代码
rails db:rollback

8. 数据库模型

8.1 创建数据表

每个模型代表一张表,下面迁移后会产生 users 表。

bash 复制代码
rails g model User name:string email:string

更多的字段可以在迁移文件中添加或修改,完成后运行 rails db:migrate 完成迁移。

8.2 迁移文件中的常用操作

  1. 创建表
ruby 复制代码
class CreateUsers < ActiveRecord::Migration[7.0]
    def change
      # 创建表
      create_table :users, id: :uuid do |t| # id 为 uuid,默认为自增
        t.string :email
        t.string :password_digest
        t.string :name, default: '默认名称' # 默认值
        t.datetime :deleted_at, null: true # 是否可以为空

        t.timestamps
      end
    end
end
  1. 其他操作记录在此
ruby 复制代码
add_column :users, :username, :string # 添加新列
rename_column :users, :password_digest, :encrypted_password # 更改列中名称
remove_column :users, :encrypted_password # 删除一列
change_column :users, :email, :text # 更改字段 email 类型
rename_table :users, :accounts # 更改表的名称
add_index :users, :email, unique: true # 对一个或多个列添加唯一索引
change_column_null :users, :email, false # 更改一个列是否可以为空
change_column_default :users, :name, from: '默认名称', to: 'new default' # 更改默认值
add_reference :posts, :user, foreign_key: true # 添加或删除外键引用

以上操作可写在迁移文件的 change、up、down方法下。

8.3 执行迁移命令

编写完成后,需要执行迁移命令,更新数据库。

bash 复制代码
rails db:migrate

注意:如果迁移完成后想对现存字段做修改,需要重新生成一个迁移文件。

9. 控制器

利用用户的请求方法+路由,进入到对应的控制器中。

9.1 创建控制器

bash 复制代码
rails g controller api/v1/user_controller

9.2 编写控制器

ruby 复制代码
class Api::V1::UsersController < ApplicationController
  def create
    # ...
  end

  def index
      # ...
  end

  def show
      # ...
  end

  def update
      # ...
  end

  def destroy
      # ...
  end

  def me
    # ...
  end

  def login
    # ...
  end
end

10. 密钥管理

10.1 编辑密钥

bash 复制代码
EDITOR="code --wait" rails credentials:edit # 开发环境

EDITOR="code --wait" rails credentials:edit --environment production # 生产环境

在打开的文档中编辑密钥。

10.2 查看密钥

  1. 打开控制台
bash 复制代码
rails c # 开发环境

RAILS_ENV=production rails c # 生产环境
  1. 查看密钥配置
bash 复制代码
Rails.application.credentials.config

11. 删除记录

11.1 使用控制台删除

bash 复制代码
rails c
User.destroy_all # 删除所有记录
User.count # 查看数量

11.2 使用 Postgres 命令

sql 复制代码
DELETE FROM users;
DELETE FROM users WHERE id = 1;

12. VSCode SQL插件推荐

SQLTools + SQLTools PostgreSQL/Cockroach Driver

相关推荐
短剑重铸之日8 分钟前
《ShardingSphere解读》07 读写分离:如何集成分库分表+数据库主从架构?
java·数据库·后端·架构·shardingsphere·分库分表
wefly20171 小时前
m3u8live.cn 在线M3U8播放器,免安装高效验流排错
前端·后端·python·音视频·前端开发工具
zhanggongzichu2 小时前
小白怎么理解后端分层概念
后端·全栈
stark张宇3 小时前
Golang后端面试复盘:从Swoole到IM架构,如何支撑360w用户的实时消息推送?
后端
小码哥_常3 小时前
从0到1:搭建Spring Boot 3企业级认证授权平台
后端
小码哥_常3 小时前
告别扫库噩梦!Spring Boot+Redis让订单超时管理飞起来
后端
大傻^3 小时前
Spring AI Alibaba 快速入门:基于通义千问的AI应用开发环境搭建
java·人工智能·后端·spring·springai·springaialibaba
IT_陈寒5 小时前
SpringBoot实战:3个隐藏技巧让你的应用性能飙升50%
前端·人工智能·后端
彭于晏Yan5 小时前
MQTT消息服务
spring boot·后端·中间件
程序员Sunday5 小时前
Claude Code 生态爆发:5个必知的新工具
前端·人工智能·后端