RailsのRESTfulルーティングを生成するresourcesについて

## RESTfulについて
例としてユーザー登録をしてもらい会員制のサイトを運営しようと思った時の事を考えてみる。

■会員登録画面を表示する(new)
→入力してもらい、データベースに登録する(create)

■登録した情報の編集画面(edit)を表示
→変更があった場合はデータベースを更新する(update)

■会員一覧の表示(index)

■会員詳細ページの表示(show)

■会員が退会した場合、データベースから削除する(destroy)

このような「あるリソース」をCRUD操作できる状態をRESTfulという。

※CRUDとは「Create」「Read」「Update」「Delete」の頭文字。

## RESOURCESで生成されるルーティング
RESTfulなルーティングを設定するにはresourcesを使う。

```routes.rb
resources :xxxs
```
* xxxs部分はコントローラ名（複数形）にするのが一般的。（EX usersやpostsなど）  
* ORMではURL中にコントローラ名を入れるのが一般的。
* こちらの記述で7つのルートが規約に沿って生成される。

### ルーティングから除外したいアクションがある。

「resources :xxxs」では7つのルートが自動的に生成されるが、「一覧ページは不要」という場合はexceptオプションで不要なアクションを指定する

```routes.rb
resources :xxxs, except: [:index]
```

### 指定したルートのみ設定したい。

逆に今回は作成だけ出来れば良いという場合がはonlyオプションで指定してやると良い

```routes.rb
resources :xxxs, only: [:create]
```

createのルートのみ生成される。作成ページ、および作成の二つにしたい場合は以下カンマ区切りで

```routes.rb
resources :xxxs, only: [:new, :create]
```

## 「resources :xxxs」で生成されるルート

生成される基本ルートは7つ。全て暗記しよう。

|  URLパターン  |  アクション  | HTTPメソッド  |  説明  | prefix |
| ---- | ---- | ---- | ---- | ---- |
| /xxxs(.:format) | index | GET | 一覧画面を生成 | xxxs
| /xxxs(.:format) |	create |	POST |	登録処理
| /xxxs/new(.:format) |	new |	GET |	登録画面を生成 | new_xxx
| /xxxs/:id/edit(.:format) |	edit |	GET |	編集画面を生成 | edit_xxx
| /xxxs/:id(.:format) |	show |	GET |	詳細画面を生成 | xxx
| /xxxs/:id(.:format) |	update |	PUT / PATCH  |	更新処理
| /xxxs/:id(.:format) |	destroy |	DELETE | 削除処理

HTTPリクエストに対応するアクションとその役割は確実に理解しておく必要がある。

## ルーティングを確認する「rails routes」

以下コマンドをターミナルで実行すると `config/routes.rbファイル` に記載された内容に沿ったルーティングを表示させることができる。（必ず作成したアプリのディレクトリにcdコマンドで移動してから行う事）

```
$ rails routes
```
結果は以下

```
                   Prefix Verb   URI Pattern                                                                              Controller#Action
                     xxxs GET    /xxxs(.:format)                                                                          xxxs#index
                          POST   /xxxs(.:format)                                                                          xxxs#create
                  new_xxx GET    /xxxs/new(.:format)                                                                      xxxs#new
                 edit_xxx GET    /xxxs/:id/edit(.:format)                                                                 xxxs#edit
                      xxx GET    /xxxs/:id(.:format)                                                                      xxxs#show
                          PATCH  /xxxs/:id(.:format)                                                                      xxxs#update
                          PUT    /xxxs/:id(.:format)                                                                      xxxs#update
                          DELETE /xxxs/:id(.:format)                                                                      xxxs#destroy
```

※rake routesというコマンドはrails routesと同じ動作をするルーティングを確認するコマンドであるが、rails4時代のコマンドであり、今後rakeコマンドは削除される予定。rails5以上を使っている場合は rails routesを使おう。

##HTTPリクエスト
HTTPリクエストはHTTPメソッドとURLの組み合わせ。
GET ＋ /xxxs　をWebサーバにリクエストするとルータ（routes.rb）の設定によりxxxsコントローラがインスタンス化されこのxxxsコントローラのindexアクションが実行される。	
indexアクションの役割は一覧画面のレンダリングなので、このアクションは一覧を表示させるようなページを作成する際に使うと良い。

##HTTPメソッド
Railsで使っているのは４つ

|  HTTPメソッド名  |  意味  | 
| ---- | ---- | 
|GET| リソースの取得（画面の表示やデータ要求）|
|POST | リソースの新規作成
|DELETE | リソースの削除
|PUT / PATCH | リソースの更新

## Prefixについて

* Prefixとは、`接頭語` という意味。
* 接頭語とは「後ろに何かをつけて使う語句の事」
* 後ろに付ける語句は「_path」と「_url」。これらをつけることによってURL（パスを生成する）
* _pathはViewで使う（相対パス）
* _urlはControllerで使う（絶対パス）

### Viewでの使用例

|  URLパターン  |  アクション  | HTTPメソッド  |  説明  | prefix |
| ---- | ---- | ---- | ---- | ---- |
| /xxxs(.:format) | index | GET | 一覧画面を生成 | xxxs

例えばPrefixの行がxxxs であれば、Viewでリンクを作成するとき以下のように使う。

```
<%= link_to "リンク文字", xxxs_path %>
```

これは以下のようなHTMLに変換される。

```
<a href="/xxxs">リンク文字</a>
```

### Controllerでの使用例

```
def アクション名
  redirect_to xxxs_url
end
```

これは以下の記述と等価になる。

```
def アクション名
  redirect_to "xxxs"
end
```