Rails のデータ作成・表示・編集・削除を体験してみよう
学習の目標
本章では、以下の内容を学習します。
- scaffoldで自動生成されるルーティングの仕組みを理解する
- RESTfulなURLとコントローラアクションの対応関係を把握する
- CRUD操作(作成・表示・更新・削除)の基本的な流れを体験する
- フラッシュメッセージの役割と動作を理解する
- 各アクションがどのような処理を行っているかを学ぶ
scaffoldで作られるルーティング
ルーティングとは何か
ルーティングとは、ブラウザからのリクエスト(例:「この情報が欲しい」「このデータを保存して」)をRailsアプリケーションのどの部分で処理するかを決める仕組みです。
簡単に言えば、「このURLにアクセスされたら、このコントローラのこのアクションを実行する」という対応表のようなものです。
resources :posts の意味
Railsのscaffoldコマンドを実行すると、コントローラやモデル、ビューだけでなく、ルーティングも自動的に設定されます。
scaffoldを実行すると、config/routes.rb
に次のような記述が追加されます。
resources :posts
たった1行のコードですが、これは「RESTful(レストフル)」と呼ばれるルールに基づいて、次のような7つのルーティングを自動的に設定するものです。
HTTPメソッド | パス | コントローラ#アクション | 役割 |
---|---|---|---|
GET | /posts | posts#index | 投稿の一覧を表示する |
GET | /posts/:id | posts#show | 特定の投稿を表示する |
GET | /posts/new | posts#new | 新規作成フォームを表示 |
POST | /posts | posts#create | 新しい投稿を作成する |
GET | /posts/:id/edit | posts#edit | 編集フォームを表示する |
PATCH/PUT | /posts/:id | posts#update | 特定の投稿を更新する |
DELETE | /posts/:id | posts#destroy | 特定の投稿を削除する |
「:id」の部分には、投稿の識別子(数字など)が入ります。例えば、/posts/1
は1番目の投稿を表示するためのURLです。
このように、resources :posts
を一行書くだけで、CRUD(Create、Read、Update、Delete)に必要な7つのルーティングが自動的に設定されるのです。これがRailsの「設定より規約」の考え方の一例です。
各アクションとCRUDの関係
データを表示するアクション
Railsでは、コントローラの各アクションがCRUDのどの処理に対応するかが決まっています。まず、データを表示するアクションを見てみましょう。
index(一覧表示):
- Read操作に対応
- データベースから全ての投稿を取得して一覧表示する
- 例: すべてのブログ記事を表示するページ
show(詳細表示):
- Read操作に対応
- 特定の1つの投稿の詳細を表示する
- 例: 1つのブログ記事の内容全体を表示するページ
new(新規作成フォーム):
- Create操作の準備段階
- 新しい投稿を作成するためのフォームを表示する
- 例: 新しいブログ記事を書くためのフォームページ
edit(編集フォーム):
- Update操作の準備段階
- 既存の投稿を編集するためのフォームを表示する
- 例: 既存のブログ記事を修正するためのフォームページ
これらのアクションは、ブラウザに何かを表示するためのもので、実際にデータを変更するわけではありません。
データを変更するアクション
次に、実際にデータを変更するアクションを見てみましょう。これらのアクションは画面を表示せず、処理後に別のページにリダイレクトします。
create(新規作成):
- Create操作に対応
new
フォームから送信されたデータを使って新しい投稿をデータベースに保存する- 例: 「投稿する」ボタンを押したときの処理
update(更新):
- Update操作に対応
edit
フォームから送信されたデータを使って既存の投稿を更新する- 例: 「更新する」ボタンを押したときの処理
destroy(削除):
- Delete操作に対応
- 指定された投稿をデータベースから削除する
- 例: 「削除する」ボタンを押したときの処理
これらのアクションは画面を表示せず、処理後に別のアクションにリダイレクトします。例えば、create
アクションは投稿を作成した後、通常はshow
アクションにリダイレクトして作成された投稿を表示します。
CRUDを試してみよう
それでは、実際にRailsが用意してくれたCRUD機能を試してみましょう。Railsサーバーを起動し、http://127.0.0.1:3000/posts
にアクセスします。
データを作成する(Create)
まず、新しい投稿を作成してみましょう。「New Post」リンクをクリックすると、新規作成フォームが表示されます。このフォームはnew
アクションによって表示されています。
タイトルと本文を入力し、「Create Post」ボタンをクリックしてみましょう。例えば、タイトルに「初めてのRails投稿」、本文に「scaffoldを使って簡単に作成できました!」と入力してみてください。
「Create Post」ボタンをクリックすると、入力した情報がcreate
アクションに送られます。create
アクションはデータベースに情報を保存し、成功すると「Post was successfully created.」というメッセージを表示して、作成した投稿の詳細ページ(show
アクション)にリダイレクトします。
データを一覧表示する(Read)
次に、投稿の一覧を表示してみましょう。ナビゲーションの「Back to posts」をクリックするか、直接http://127.0.0.1:3000/posts
にアクセスしてみてください。作成した投稿が一覧に表示されているはずです。
このページはindex
アクションが担当しており、データベースから全ての投稿を取得して表示しています。一覧に表示される情報は、通常はタイトルなどの簡単な情報だけで、詳細は表示されないことが多いです。
データの詳細を表示する(Read)
投稿の詳細を見てみましょう。一覧ページで「Show this post」リンクをクリックすると、その投稿の詳細ページに移動します。
このページはshow
アクションが担当しており、指定された1つの投稿の全ての情報を表示しています。詳細ページでは通常、投稿のタイトルや本文など、全ての情報が表示されます。
データを編集する(Update)
投稿を編集してみましょう。詳細ページで「Edit this post」リンクをクリックすると、編集フォームが表示されます。
このフォームはedit
アクションによって表示され、既存の投稿の内容がすでに入力された状態で表示されます。タイトルや本文を変更し、「Update Post」ボタンをクリックしてみましょう。
「Update Post」ボタンをクリックすると、変更した情報がupdate
アクションに送られます。update
アクションはデータベースの情報を更新し、成功すると「Post was successfully updated.」というメッセージとともに詳細ページへリダイレクトします。
データを削除する(Destroy)
最後に、投稿を削除してみましょう。詳細ページで「Destroy this post」リンクをクリックすると、確認ダイアログが表示されます。「OK」をクリックすると、destroy
アクションが実行されます。
destroy
アクションはデータベースから該当する投稿を削除し、成功すると「Post was successfully destroyed.」というメッセージとともに一覧ページにリダイレクトします。一覧ページを確認すると、削除した投稿が消えているはずです。
フラッシュメッセージについて
「Post was successfully created.」などのメッセージは、フラッシュメッセージと呼ばれるものです。フラッシュメッセージは、ユーザーに処理の結果を伝えるための一時的なメッセージです。
フラッシュメッセージには次のような特徴があります。
フラッシュメッセージは一時的なもので、ページをリロードすると消えてしまいます。試しに、「Post was successfully destroyed.」と表示されている状態でページを再読み込みしてみてください。メッセージが消えているはずです。
通常のビュー変数と違い、リダイレクト後も値が保持されます。例えば、create
アクションでデータを保存した後、show
アクションにリダイレクトしても、フラッシュメッセージは表示されます。
標準ではsuccess
(成功)とalert
(警告)の2種類があり、多くの場合、CSSでそれぞれ違う色や装飾になっています。成功メッセージは緑色で、警告メッセージは赤や黄色で表示されることが多いです。
フラッシュメッセージは、ユーザーに操作の結果を分かりやすく伝えるために重要な役割を果たしています。特に、データの作成や更新、削除といった重要な操作の結果を伝えるのに役立ちます。
まとめ
本章では、Railsにおけるルーティングとコントローラの基本的な仕組みを学び、実際にCRUD操作を体験しました。以下の内容を理解できたことと思います。
resources :posts
によって、7つのCRUDアクションのルーティングが自動で設定される- アクションには「画面を表示するもの」と「データを変更するもの」の2種類がある
- 画面を表示するアクションは
index
、show
、new
、edit
- データを変更するアクションは
create
、update
、destroy
- フラッシュメッセージは一時的なメッセージで、ユーザーに処理結果を伝える
これらの基本的な概念は、Railsアプリケーション開発の中心となるものです。次の章では、これらのアクションの詳細についてさらに深く学んでいきましょう。