创建后端项目
初始化目录
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数据。