タスク内容
- 記事更新の API とテストの実装を行いましょう。
1. このTaskでやろうとしていること
- 何をやる?
- PATCH /api/v1/articles/:id で記事を更新できるようにする
- 投稿者(current_user)以外は更新できないようにする(403)
- 更新失敗(422)/ 存在しない(404)もJSONで返す
- なぜやる?
- 記事編集機能を実現しつつ、他人の記事を編集できないようにするため
2. 処理の流れ
- クライアントから記事更新リクエストが来る(PATCH /api/v1/articles/:id)
- ルーティングにより ArticlesController の update アクションが呼ばれる
- URLに含まれる :id を params[:id] として受け取り、Article.find(params[:id]) で対象の記事をDBから探す
- 記事の投稿者(article.user)と current_user(ログインしているuser) を比較して、投稿者本人かチェックする
- 本人でなければ 403 Forbidden(「権限がありません」)を返して処理を終了する(return)
- 本人なら article.update(article_params) で更新を試みる(article_params は許可した項目のみ)
- 更新に成功したら、更新後の記事を serializer で整形してJSONで返す(通常200)
- 更新に失敗したら(バリデーションなど)、errors と 422 Unprocessable Entity を返す
- (例外)記事が見つからない場合は ActiveRecord::RecordNotFound を rescue して、404(「記事が見つかりません」)を返す
3. 今回触ったファイル
app/controllers/api/v1/articles_controller.rb
config/rubocop/rspec.yml
spec/requests/api/v1/articles_request_spec.rb