Rails コース

CRUDを実装する(1)

CRUDとはCreate(生成)、Read(読み込み)、Update(更新)、Delete(削除)の4つの頭文字を取った言葉で、データを操作するための最低限の機能を指します。例えば、前章のRestaurantモデルを思い出してください。

CRUD意味前章のRestaurantモデルに当てはめると…
Create生成Restaurantモデルのインスタンスを作成し、restaurant.saveでデータを保存
Read読み込みRestaurant.firstでレコードを呼び出し
Update更新呼び出したレコードに情報を上書き保存
Delete削除restaurant.deleteでレコードを削除

では、restaurant_guideのプロジェクトにレストランのCRUDを実装してみましょう。はじめにどんなページが必要になりそうかイメージしてみると、レストランのCRUDをひとつ作るだけでも関連するページが複数必要になるのが分かります。

  • レストランの新規登録ページ
  • 登録されたレストランの一覧ページ
  • レストランの詳細ページ
  • レストランの情報更新用ページ など

では、例えばレストランの新規登録ページのURLをhttp://localhost:3000/restaurants/newとし、ページを作成する場合にはどのような作業が必要でしょうか。通常は、routesファイルにget "restaurants/new" => "restaurants#new"を追加し、対応するcontrollerとviewを準備します。ただ一覧ページや詳細ページなど、それぞれのページ作成のためにひとつひとつroutesファイルに追記していくとコード量が膨大になり、サイトの構成が分かりにくくなってしまいます。
RailsにはCRUDの実装をスムーズに行えるように、routesを簡略化して書く方法があります。それがresources :restaurantsです。

この1行でどのようなルートが生成されているのか?確認するためにコマンドでrails routesを実行してください。

ここではgetpostなどのhtmlメソッドやURIパターン(URLの集合体がURI)、それに対応するcontrollerとアクションが一覧で確認できます。
例えば1行目は「restaurantsというURLにgetメソッドでアクセスしたときには、restaurantsコントローラーのindexアクションを実行してください。」という意味です。
またhtmlメソッドに関して、getpost以外に、patchputdeleteが登場しています。getpostのおさらいをしつつ意味を確認しましょう。

HTTPメソッド用途routesの書き方
getデータを取得するget 'restaurants' => 'restaurants#index'
postデータを送信するpost 'restaurants' => 'restaurants#create'
patchデータを更新するpatch "restaurants/:id" => 'restaurants/update'
deleteデータを削除するdelete "restaurants/:id" => 'restaurants/update'

putpatchと同じくデータの更新を意味しますが、patchが広く使われています。
参照:Edge Rails: PATCH is the new primary HTTP method for updates

この教材はメンバー専用です

メンバー専用の教材にアクセスするには、
ハッカーIDでログインしてください。

or