Skip to content

创建后端项目

初始化目录

ruby
rvm use 3
// 容器里切换使用ruby,若报错则执行 zsh --login 在执行上面的命令
gem sources --add https://gems.ruby-china.com/ --remove https://rubygems.org/
// ruby切换镜像源加速
bundle config mirror.https://rubygems.org https://gems.ruby-china.com
// bundle切换镜像源加速
gem install rails -v 7.0.2.3
// gem (类似于npm) 安装rails
pacman -S postgresql-libs
// 由于用了postgresql数据,需要安装一个驱动
cd ~/repos
// repos 目录下做了持久化处理
rails new --api --database=postgresql --skip-test mangosteen-1
// rails 创建一个使用api模式,数据库使用postgresql 跳过测试 目录名
code mangosteen-1
// 新建终端
bundle exe rails server 
// 启动项目 或 bin/rails s
// 需要关闭 server 请按 Ctrl + C

启动数据库

ruby
docker run -d \
    --name db-for-mangosteen \
    -e POSTGRES_USER=mangosteen \
    -e POSTGRES_PASSWORD=123456 \
    -e POSTGRES_DB=mangosteen_dev \
    -e PGDATA=/var/lib/postgresql/data/pgdata \
    -v mangosteen-data:/var/lib/postgresql/data \
    --network=network1 \
    postgres:14
// --name 启动一个名字为 db-for-mangosteen
// -e 配置环境变量-数据库用户名和密码,数据库名称
// -v 新增一个mangosteen-data的数据卷
// --network 配置rails和数据库相同网络 通过name访问
//  postgres:14 镜像名称 版本14
ruby
docker run -d      --name db-for-mangosteen      -e POSTGRES_USER=mangosteen      -e POSTGRES_PASSWORD=123456      -e POSTGRES_DB=mangosteen_dev      -e PGDATA=/var/lib/postgresql/data/pgdata      -v mangosteen-data:/var/lib/postgresql/data      --network=network1      postgres:14

可以在docker中看到数据库的容器

数据则是放在数据卷中的

连接数据库

修改config下的database.yml文件

ruby
development:
  <<: *default
  database: mangosteen_dev
  username: mangosteen
  password: 123456
  host: db-for-mangosteen

之后终止终端,重启server,bundle exe rails s

点击链接可以看到如下图,说明连接数据库成功了

设计数据库

两种思路

  • 自上而下:先想大概,再添细节
  • 自下而上:用到什么加什么,会出现打脸的情况

两种思路可以混合,

先采用自下而上

工具建模工具:bin/rails g model user email:string name:string

数据库操作工具:ActiveRecord::Migration

在change方法里填写或修改内容

同步到数据库:bin/rails db:migrate

回滚命令:bin/rails db:rollback step=1(回滚多步)

创建路由

config/routers.rb文件下添加如下代码

ruby
get '/users/:id', to: 'users#show'
post '/users/', to: 'users#create'

创建controller

执行bin/rails g controller users show create,修改routers.rb如下所示。

然后在controller/users_contoller.rb文件重修改

ruby
class UsersController < ApplicationController
  def create
    user = User.new name: 'baizhe', email: 'xxx@qq.com'
    if user.save
      render json: user
    else
      render json: user.errors
    end
  end

  def show
    user = User.find_by_id params[:id]
    if user
      render json: user
    else
      head 404
    end
  end
end

models/user.rb添加email的校验,具体见链接,修改成如下所示

ruby
class User < ApplicationRecord
    validates :email, presence: true
end

之后可以新开一个终端通过curl命令来执行,curl -X POST http://127.0.0.1:3000/users,可以看到执行成功返回的JSON。也可以通过vscode的插件来查看。

执行curl [http://127.0.0.1:3000/users/1](http://127.0.0.1:3000/users/1)可以看到创建成后的JSON数据。