【Rails API】Rails API on Docker + scaffoldのHello Worldを行ってみた ~STEP2:Rails API実験~
はじめに
こんにちは、がんがんです。
最近、Rails API + PostgreSQLの環境をDockerにて用意し、scaffoldを用いた簡単な実験を行う機会がありました。
前回の記事では、Rails + PostgreSQL on Dockerの環境を構築していきました。
gangannikki.hatenadiary.jp
今回のゴール
- Ruby on Rails + PostgreSQLの環境をDocker(Docker Compose)で構築する
- (本備忘録の内容) Rails APIの検証実験(scaffold)を行ってみる
環境
- Docker for Windows:19.03.12
- docker-compose:1.26.2
- Ruby:2.7.1 (2.7.1-alpine3.12)
- Ruby on Rails:5.2.4
- Postgre SQL:11.9 (11.9-alpine)
環境構築
前回の備忘録にてまとめております。
gangannikki.hatenadiary.jp
実験
scaffoldを用いてCRUDの実験を行ってみます。
$ docker-compose run --rm back rails g scaffold user name:string $ docker-compose run --rm rails db:migrate
userはまだ初期状態ですのでこの時点ではなにも入ってない状態です。
$ curl -X GET http://localhost:3000/users []
CREATE
$ curl -X POST http://localhost:3000/users -d 'user[name]=test1' {"id":1,"name":"test1","created_at":"2020-09-30T21:54:28.960Z","updated_at":"2020-09-30T21:54:28.960Z"} $ curl -X POST http://localhost:3000/users -d 'user[name]=test2' {"id":2,"name":"test2","created_at":"2020-09-30T21:54:39.756Z","updated_at":"2020-09-30T21:54:39.756Z"} $ curl -X POST http://localhost:3000/users -d 'user[name]=test3' {"id":3,"name":"test3","created_at":"2020-09-30T21:54:42.938Z","updated_at":"2020-09-30T21:54:42.938Z"}
GET
ちゃんと生成されていて良かった。
# -X GETはなくても可 $ curl -X GET http://localhost:3000/users [{"id":1,"name":"test1","created_at":"2020-09-30T21:54:28.960Z","updated_at":"2020-09-30T21:54:28.960Z"},{"id":2,"name":"test2","created_at":"2020-09-30T21:54:39.756Z","updated_at":"2020-09-30T21:54:39.756Z"},{"id":3,"name":"test3","created_at":"2020-09-30T21:54:42.938Z","updated_at":"2020-09-30T21:54:42.938Z"}]
UPDATE
$ curl -X PUT http://localhost:3000/users/1 -d 'user[name]=test11' {"id":1,"name":"test11","created_at":"2020-09-30T21:54:28.960Z","updated_at":"2020-09-30T21:57:20.619Z"}
試しにGETしてみましたが、curlでの取得順番はid順ではないんですね。知らんかった。
$ curl http://localhost:3000/users [{"id":2,"name":"test2","created_at":"2020-09-30T21:54:39.756Z","updated_at":"2020-09-30T21:54:39.756Z"},{"id":3,"name":"test3","created_at":"2020-09-30T21:54:42.938Z","updated_at":"2020-09-30T21:54:42.938Z"},{"id":1,"name":"test11","created_at":"2020-09-30T21:54:28.960Z","updated_at":"2020-09-30T21:57:20.619Z"}]
DELETE
$ curl -X DELETE http://localhost:3000/users/3
ちゃんと消えてますね。
$ curl http://localhost:3000/users [{"id":2,"name":"test2","created_at":"2020-09-30T21:54:39.756Z","updated_at":"2020-09-30T21:54:39.756Z"},{"id":1,"name":"test1","created_at":"2020-09-30T21:54:28.960Z","updated_at":"2020-09-30T22:00:06.330Z"}]
作成したscaffoldを削除するには
userモデルを作成する際に入力ミスをしていたことがCRUD実験を行っているときに発覚しました。
db:migrate
する前後では削除の仕方が違うようなので今後のためにメモを残しておきます。
$ docker-compose run --rm back rails db:rollback $ docker-compose run --rm back rails d scaffold user
db:migrate
した後であれば、必ず上記の手順で戻してあげる必要があるようです。
実際にrails d scaffold
から実行したら失敗しました。
下記は参考記事です。
qiita.com