[Ruby on Rails5 アプリケーション プログラミング]学習ログ#2[2019/12/12]

**前回 -> [[Ruby on Rails5 アプリケーション プログラミング]学習ログ#1[2019/12/11]](https://qiita.com/CAD-guest01/items/06892b36973fa1e35828)**
**次回 -> [[Ruby on Rails5 アプリケーション プログラミング]学習ログ#3[2019/12/13]](https://qiita.com/CAD-guest01/items/4acd685fdd9871b7cf40)**

---
#目的
### Progateで学んだことをローカル環境で手を動かして復習することで、基礎を固める

#使用する教材
###山田祥寛(2017). RubyonRails5 アプリケーションプログラミング　株式会社技術評論社

#Q.「RubyonRails5 アプリケーションプログラミング」とは？
#A.ProgateのRoRコースを終えた後にするRoRの勉強としておすすめされている本

出典
(Samurai Blog / Ruby on Rails学習本おすすめ6選【入門者〜上級者までレベル別に解説】)[https://www.sejuku.net/blog/110292]

---
#今日やったこと
##Scaffolding機能によるRails開発の基礎(p64~p102)
[前回](https://qiita.com/CAD-guest01/items/06892b36973fa1e35828)とは異なり、コマンドを打っていろいろ生成していくのではなく自動的に生成されたファイルを一通り巡ってこのアクションは何ができるのかを見ていきました。

###0. Scaffolding機能とは？
  **Scaffolding**(足場)**機能** -> **手軽にCRUD機能を持ったアプリケーションを構築できる機能**

>CRUD(Create-Read-update-Delete)とは、永続的なデータを取り扱うソフトウェアに要求される4つの基本機能である、データの作成（Create）、読み出し（Read）、更新（Update）、削除（Delete）の頭文字を繋げた語。
>>出典　[IT用語辞典 e-Words / CRUD](http://e-words.jp/w/CRUD.html)

```console:console
# Scaffolding機能を利用
rails g(enerate) scaffold name field:type ・・・
-----------------------------------------------
name:モデル名　 field:フィールド名　 type:データ型

# マイグレーションによるテーブルの作成
rails db:migrate

#自動生成されたルートを確認
[routes.rb]
 resources :names　を追記
[console]
rails routes

| 呼び出すアクション |HTTPメソッド | 役割                             |
|------------------|-------------|---------------------------------|
| index            |GET          |一覧画面を表示                    |
| show             |GET          |個別詳細画面を表示                |
| new              |GET          |新規登録画面を表示                |
| create           |POST         |新規登録画面の入力を受けて登録処理  |
| edit             |GET          |編集画面を表示                    |
| update           |PATCH / PUT  |編集画面の入力を受けて更新処理     |
| destroy          |DELETE       |一覧画面で指定されたデータを削除処理|
```

###1.indexアクション -> トップページを生成するためのアクション
| アクション名 |テンプレートファイル名 |
|------------------|-------------|
| books#index            |index.html.erb          |

#### ビューヘルパーとは？ 
- テンプレートファイルを記述する際に役立つメソッドの総称
- ビューでよく利用する操作をシンプルにコードで記述可能

```console:例.　与えられた引数を元にハイパーリンクを生成する
link_to(body, url[,html_options])
---------------------------------
body:リンクテキスト　url:リンク先のパス　html_options:<a>要素に付与する属性
（html_optionsにdata: {confirm: 'message'}を指定すると、リンククリック時に確認ダイアログが表示される）
```

###2.showアクション -> 詳細画面の作成
| アクション名 |テンプレートファイル名 |
|------------------|-------------|
| books#show            |show.html.erb          |

###3.new / createアクション　-> 入力フォームの表示(new)、データの登録処理(create)を行う
| アクション名 |テンプレートファイル名 |
|------------------|-------------|
| books#new            |new.html.erb          |

#### 部分テンプレートとは？
- メインテンプレートから呼び出される断片的なテンプレートのこと
- ファイル名の先頭に「_」を付けて、このファイルが部分テンプレートであることを宣言する
- 各フォーム画面の共通部分を部分テンプレート化することで同じコードを重複して書く必要がなくなる

```console:特定のモデルを編集するためのフォームを生成する
form_for(model) do |f|
  ・・・body・・・
end
---------------------------------
model:モデルオブジェクト　body:フォームの本体
```

```console:引数で指定されたパスへリダイレクトさせる
redirect_to url
---------------------------------
url:リダイレクト先のパス
```
###4.edit / updateアクション -> 編集フォームを表示(edit)、データの更新処理(update)を行う
| アクション名 |テンプレートファイル名 |
|------------------|-------------|
| books#edit            |edit.html.erb          |

```console:既存のオブジェクトを更新させる
update(attrs)
---------------------------------
attrs:更新データ（「プロパティ名:値」　の形式）
```

###5.destroyアクション -> データの削除
 **URL経由で渡されたパラメータをキーにオブジェクトを取得し、削除する**

---