Ruby on Railsを体系的に学ぶためのRAILS GUIDESの使い方

# 始めに
この記事は、Railsアプリケーションがリクエストを受け取って、レスポンスを返すまでにどんな処理を行うかについて触れています。
個人的に「一度は読んでおいて損はない」と感じたRAILSGUIDEのリンクを集めました。
ここで紹介するリンクは、はじめは読んでも意味がわからないと思いますが、目を通す意味があると思います。

取り急ぎ執筆したため、現時点では世界一投げやりなRails講座です。

今後少しずつ説明を書いていこうと思います。
こうした方がいいんじゃないかなど、意見がありましたら、ご教授願います。

### 注意書き
初心者の人がここに書いてあることを全て理解するのは**不可能**だと思います。
目を通して頭の片隅に入れておくだけでいいです。
単語も覚えようとしないでください。「ふーん、こんなのがあるんだ」程度でいいです。

### 対象
以下のような人が「ギリギリ理解できるかできないか」レベルの箇所を抜粋しています。

- Railsの勉強始めたけど腑に落ちない人
- コードの意味がわかってない人
- コピペコーダー


### 対象じゃない人
- Rails newしたことない人
- [MVC](https://ja.wikipedia.org/wiki/Model_View_Controller)という言葉を聞いたことすらない人
- 読むより実践派の人
- Railsできる人



## 0. リクエストとレスポンス
Webのアプリケーションはリクエスト(お願い)を受け取ることではじまります。
アプリ内のボタンをおされたり、URLが入力されたり、google検索に引っかかったりすることで、アプリケーションに**リクエスト**（お願い）が送られます。

リクエストはパス（URL）とHTTPリクエストメソッド（GETやPOST）で構成されます。

Webアプリケーションは、この**リクエスト（お願い）** に対して、様々な処理をした後に**レスポンス（返信）** を返します。

HTTPリクエストについては、こちらの記事を見るといいと思います。
[超絶初心者のためのサーバとクライアントの話](https://qiita.com/shuntaro_tamura/items/ae55b99deb9e2a170754)


## 1. Routing
Railsアプリケーションはリクエストを受け取ると、Railsのルーターがリクエストを識別します。
ルーターのカスタマイズは、config/routes.rbで行います。

以下のリンクの2.4までは目を通すといいと思います。
[Railsのルーティング | RAILS GUIDE](https://railsguides.jp/routing.html)

## 2. Controller
[MVC](https://ja.wikipedia.org/wiki/Model_View_Controller)モデルのCです。
ルーターに指名されたコントローラは、何かしらの処理を行い、最終的にViewを用いてHTMLを表示します。

この「何かしらの処理」を理解するために、リンクの以下の部分を目を通すといいと思います。

- 1 ~ 4.1　コントローラの役割〜ハッシュと配列パラメータ
- 4.3 ルーティングパラメータ
- 4.5 Strong Parameter
- 8 フィルタ

[Railsのコントローラ | RAILS GUIDE](https://railsguides.jp/action_controller_overview.html)


## 3. View
[MVC](https://ja.wikipedia.org/wiki/Model_View_Controller)モデルのVです。

前章で、コントローラは以下のように説明しました。
> ルーターに指名されたコントローラは、何かしらの処理を行い、最終的にViewを用いてHTMLを表示します。

この章では、「Viewとは何か」と「コントローラはどうやってViewを用いるのか」について触れます。

### 3-1 Viewとは何か
リンクの以下の部分を目を通すといいと思います。

- 1 ~ 3.1.1　Action Viewについて 〜 ERB
- 3.2 ~ 4 パーシャル 〜 パーシャルレイアウト
- 6.1 Action Viewのヘルパーメソッドの概要（余裕があれば）

[Action View の概要 | RAILS GUIDE](https://railsguides.jp/action_view_overview.html)

もし余裕があればこちらも読んでみましょう。（優先順位は3-2の方が高いです。）
ユーザに入力させる、フォームについてです。

- 1 ~ 2.2 基本的なフォームを作成する 〜 フォームとオブジェクトを結び付ける 
- 7 パラメータの命名ルールを理解する

[Action View フォームヘルパー | RAILS GUIDE](https://railsguides.jp/form_helpers.html)

### 3-2 コントローラはどうやってViewを用いるのか
リンクの以下の部分を目を通すといいと思います。

- 1 ~ 2.2　概要: 部品を組み上げる 〜 レンダリングを使用する
- 2.3 redirect_toを使用する
- 3.4 パーシャルを使用する

[レイアウトとレンダリング | RAILS GUIDE](https://railsguides.jp/layouts_and_rendering.html)

## 4. モデル
[MVC](https://ja.wikipedia.org/wiki/Model_View_Controller)モデルのMです。

前章で、コントローラは以下のように説明しました。
> ルーターに指名されたコントローラは、何かしらの処理を行い、最終的にViewを用いてHTMLを表示します。

この「何らかの処理」にデータベースが絡む場合、モデルが必要になります。
モデルは、*基本的には*データベース内のテーブルの数だけ存在します。モデルが複数存在するということは、テーブルのデータ同士が関連している可能性があります。この関連自体をアソシエーションといいます。

この章では、以下について触れます。

- 4-1 Modelとは何か
- 4-2 データベースの編集方法
- 4-3 どうやってModelを通じてデータを取り出すか
- 4-4 アソシエーションとは何か

### 4-1 Modelとは何か
リンクの以下の部分を目を通すといいと思います。

- 1 ~ 3　Active Recordについて 〜 Active Recordのモデルを作成する
- 5 ~ 8 CRUD: データの読み書き 〜 マイグレーション

[Active Record の基礎 | RAILS GUIDE](https://railsguides.jp/active_record_basics.html)

### 4-2 データベースの編集方法
リンクの以下の部分を目を通すといいと思います。

- 1 ~ 2　マイグレーションの概要 〜 マイグレーションを作成する
- 3 （余裕があったら）
- 4 ~ 8 CRUD: マイグレーションを実行する 〜 マイグレーションとシードデータ

[Active Record マイグレーション | RAILS GUIDE](https://railsguides.jp/active_record_migrations.html)

### 4-3 データベースの編集方法
リンクの以下の部分を目を通すといいと思います。

- 1 ~ 3　データベースからオブジェクトを取り出す 〜 並び順

[Active Record クエリインターフェイス | RAILS GUIDE](https://railsguides.jp/active_record_querying.html)

### 4-3 データベースの編集方法
リンクの以下の部分を目を通すといいと思います。

- 1 ~ 2.3　関連付けを使用する理由 〜 has_many関連付け(余裕があったら、2章全体を読んでみましょう)

[Active Record の関連付け (アソシエーション) | RAILS GUIDE](https://railsguides.jp/association_basics.html)

# フィードバックについて
「こうした方がいいんじゃないか」
「この部分の説明はリンク先だけでは1mmも理解できない」
などの意見がありましたら、コメントにてご教授頂けると嬉しいです。

説明、オススメリンクを随時足していく予定です。