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

相关推荐
java1234_小锋39 分钟前
Spring Bean有哪几种配置方式?
java·后端·spring
柯南二号2 小时前
【后端】SpringBoot用CORS解决无法跨域访问的问题
java·spring boot·后端
每天一个秃顶小技巧3 小时前
02.Golang 切片(slice)源码分析(一、定义与基础操作实现)
开发语言·后端·python·golang
gCode Teacher 格码致知4 小时前
《Asp.net Mvc 网站开发》复习试题
后端·asp.net·mvc
极小狐5 小时前
如何构建容器镜像并将其推送到极狐GitLab容器镜像库?
开发语言·数据库·机器学习·gitlab·ruby
Moshow郑锴5 小时前
Spring Boot 3 + Undertow 服务器优化配置
服务器·spring boot·后端
Chandler246 小时前
Go语言即时通讯系统 开发日志day1
开发语言·后端·golang
有梦想的攻城狮6 小时前
spring中的@Lazy注解详解
java·后端·spring
野犬寒鸦7 小时前
Linux常用命令详解(下):打包压缩、文本编辑与查找命令
linux·运维·服务器·数据库·后端·github
huohuopro8 小时前
thinkphp模板文件缺失没有报错/thinkphp无法正常访问控制器
后端·thinkphp