--- robots: noindex, nofollow --- # Railsのscaffoldでユーザー管理機能を作ってみよう! scaffoldとはCRUD処理を自動で作ってくれる機能。 MVC全部作ってくれて、DBのmigrateファイルも作ってくれる ## 1. scaffoldでMVCファイルを作成 ```bash= bin/rails generate scaffold user name:string age:integer prof:text ``` ## 2. dbをmigrate ```bash= bin/rails db:migrate ``` ## 3. モデルを見てみよう! デフォルトのモデルでは「ApplicationRecord」を継承していて、 そちらの親クラス(実際にはさらに親のクラス)でデータベースへ接続して様々なCRUD処理をしてくれる便利メソッドが作られている。 ### 3.1 命名規則 テーブル名:users モデル名/クラス名:User ファイル名:user.rb - 単語が複数組み合わさる場合 テーブル名:line_items モデル名/クラス名:LineItem ファイル名:line_item.rb https://qiita.com/gakkie/items/3afcd505c786364aa5fa https://qiita.com/tfrcm/items/80625a75959591c2b7cd ## 4. コントローラーとビューを見てみよう! ### 4.1 コントローラーの命名規則 コントローラ名:users コントローラクラス名:UsersController ファイル名:users_controller.rb - 単語が複数組み合わさる場合 コントローラ名:SalesPoint コントローラクラス名:SalesPointController ファイル名:sales_point_controller.rb ### 4.2 RESTfulに基づいたURIとアクション 基本的なCRUD処理とそれに対応したURIとメソッドを決める。 | URL(URIとも呼ばれる) | HTTPメソッド | アクション名 | 機能名 | 役割 | |:-----------|:------------:|:------------:|:------------:|:------------:| | /users | GET | index | 一覧表示画面 | 全てのユーザーを表示する | | /users/new | GET | new | 新規登録画面 | ユーザーの新規登録画面を表示する | | /users | POST | create | 新規登録 | ユーザーを新規登録する | | /users/1 | GET | show | 詳細表示画面 | 該当のユーザーの詳細を表示する | | /users/1/edit | GET | edit | 編集画面 | 該当のユーザーの編集画面を表示 | | /users/1 | PATCH,PUT | update | 更新 | 該当のユーザーを更新する | | /users/1 | DELETE | destroy | 削除 | 該当のユーザーを削除する | URLとHTTPメソッドから、そのリクエストを処理するコントローラとアクションに振り分ける。(ルーティング) 上記URLとメソッドの決め方を「REST」といい、railsはその「REST」という設計思想に沿ったRESTfulなフレームワーク。 「RESTful」とはRESTの設計思想に従ってるよ〜って意味。 「RESTfulなAPI」「RESTfulなサービス」「RESTfulなフレームワーク」とかって言い方をする。 ### 4.3 RESTとは? RESTの設計ルール。 ``` ・アドレス指定可能なURIで公開されていること ・インターフェース(HTTPメソッドの利用)の統一がされていること ・ステートレスであること(セッションやクッキーを使って状態管理しない) ・処理結果がHTTPステータスコードで通知されること ``` 要は、「何を管理するか(リソース)」を洗い出して決め、「そのリソースをどうしたいか」を決め、「そのためのURI(エンドポイント)」を決めようよ。ってこと。 (ざっくり言えば、URI版の命名規則みたいなもん) https://developer.mozilla.org/ja/docs/Web/HTTP/Methods ### 4.4 ダメなURI設計例 #### やりたい事 ユーザーを登録したい(サーバーへブラウザで入力したユーザー情報を渡し、ユーザーを新規登録したい) #### URIとHTTPメソッド ダメなパターン ``` GET /addusers?name=kazukichi&password=aiueo ``` 良いパターン ``` POST /users/add ``` ``` POST /users/new ``` #### やりたい事 ある日記を表示(取得)したい(サーバーから、ある日記情報を取得したい) #### 実際のURIとHTTPメソッド ダメなパターン ``` POST /adddiary?user_id=15 ``` 良いパターン ``` GET /diaries/15/ ``` https://qiita.com/NagaokaKenichi/items/6298eb8960570c7ad2e9 ### 4.5 ルーティングの設定方法 URLとHTTPメソッドから、そのリクエストを処理するコントローラとアクションに振り分けるか(ルーティング)をroutes.rbで設定する。 ```ruby= get 'users', to: 'users#index' get 'users/new', to: 'users#new' post 'users', to: 'users#create' get 'users/:id', to: 'users#show' get 'users/:id/edit', to: 'users#edit' put 'users/:id', to: 'users#update' patch 'users/:id', to: 'users#update' delete 'users/:id', to: 'users#destroy' ``` この「基本的なおきまりのCRUD処理」のルーティングであれば、実は ```ruby= resources :users ``` という一行で自動的にrailsが1つ1つのルーティングを判断してくれる。 destroyをdeleteとかってメソッドにしちゃったらダメ。 なので、必ず * index * new * create * show * edit * update * destroy というメソッド名でなければ``resources``でルーティングしてもちゃんと振り分けられない。