TECH 　DAY　5

勉強した項目：　Ruby、Rails、中間試験
時間： 10:15
内容：

＊学習アウトプットです。なにぶん間違いなんかもあります。気をつけますがその際はご指摘いただけますと幸いです＊

###[アソシエーション]
アソシエーションとはモデル間の関連付けを管理する機能のこと、これによりモデルをまたいだデータの呼び出しをより簡単に行うことができる
**条件を2つ満たす必要がある**
•モデルクラスに`has_many`やbe`longs_to`などの定義がされている
•所属する側のテーブルに所属する`クラス名_id`というカラムがある

１からみた条件　　`has_many`   **１　対　多**
多からみた条件　　`belong_to`  **多はどこか必ず所属している**  `be lonng to~ 「〜に属する」`

###[n+1問題]
モデルを利用してデータベースの情報にアクセスする際にはSQLが発行される
このSQLが発行されるたびにデータベースに対して通信が走るので、SQLが大量に発行されれば処理が重くなる
→SQLを発行する•••データベースからデータを抽出する操作

n+1問題は、データベースを呼び出す毎に大量のSQLが発行される問題

###[ includesメソッド]
n+1問題を解消することができる。　書き方は、`includes(:モデル名)`
引数で、関連モデルを`シンボル型(接頭に:がつく型)`で指定

###[deleteメソッド]
情報の削除を行う際に利用するHTTPメソッド

###[rake routes]
現在定義しているルーティングを表示してくれるコマンド、ターミナルにて指定

|      項目名     |           	意味                                 |
|---------------:|:-----------------------------------------------------|
|Prefix	|「Prefix」はルーティングの名前を表しています。「Prefix」は設定を行わなくても、自動的に割り当てられますが、自ら設定することもできます。|
|Verb	|「Verb」はHTTPメソッドを表しています。右側に表示されているパスにどのHTTPメソッドでアクセスするかを示しています。|
|URI Pattern	|「URI Pattern」はルーティングのパスを表しています。このパスにアクセスされた際に、指定のコントローラとアクションで処理が行われます。|
|Controller#Action|	「Controller#Action」は指定したパスにアクセスした際に処理が行われるコントローラとアクションを表しています。#以前がコントローラ名、#以後がアクション名を示しています。|

###[destroyメソッド]
ActiveRecordメソッドのうちの一つで、インスタンスに対してそのレコードを削除する際に使うことができる

###[後置if]
最後のendを省略してif文を処理の後方に配置する書き方
→`elsif`, `else`にあたる条件分岐が無く、かつ処理が一行で完結する場合に用いる

###[patchメソッド]
HTTPリクエストには`get`、`post`、`delete`メソッドがあることが、`patchメソッド`は情報の更新を行う際に使用する

###[HTTPリクエスト]
Railsでは4種類のHTTPリクエストのメソッドがある

|  メソッド  | 役割 |
|:------|:--|
| get | サーバーからブラウザに情報を返す。単にウェブサイトを閲覧する際にはこのメソッドが利用されている。 |
| post | ブラウザからサーバーに情報を送信し、サーバーに情報を保存する。情報の登録などの際に、サーバーに情報を送信するために利用される。 |
| delete | ブラウザからサーバーに情報を送信し、サーバーの情報を削除する。アカウントの削除などの際に、サーバー内のデータを削除するために利用される。 |
| patch | ブラウザからサーバーに情報を送信し、サーバー内の情報を置き換える。登録情報の更新などの際に、サーバー内のデータを更新するために利用される。 |
| put | メソッド名は違うが、patchと同じ役割を持っている。rails3まではputを使っていたが、rails4からはpatchに移行したためカリキュラム内では使用しない。 |

###[updateメソッド]
ActiveRecordメソッドのうちの一つである。
　`updateメソッド`はモデルのインスタンスに対して使用することで、引数内の情報にレコードを更新することができる

###[Railsのリソースの7つのアクション]
7つの基本アクションへのリクエストがデフォルトで設定されている
　このリクエストは、`routes.rb`に`resources :ルーティング`を設定したいコントローラ名と書くだけで反映させることが可能である

| Railsのリソースの7つのアクション | 役割 |
|:--|:--|
| index | リソースの一覧を表示する。 |
| show | リソースの内容を表示する。 |
| new | リソースを追加する。 |
| create | リソースを追加し、作成する。 |
| edit | リソースを更新するためのフォームを表示する。 |
| update | リソースを更新する。 |
| destroy | リソースを削除する。 |

###[resourcesメソッド]
コントローラの7つのアクションで記載した7つのアクション名に対してのルーティングを自動で生成するメソッド
リソース•••テーブルの中の１つのデータ

```ruby
 Rails.application.routes.draw do
  resources :models
end
```

###[ルーティングのネスト]
ネスト•••別名、入れ子構造
ある記述の中に入れ子構造で別の記述をする方法

ルーティングでは、あるコントローラへのルーティングの記述の中に、別のコントローラへのルーティングを記述すること
　`do` と `end` で挟むことで、ネストさせる。

**ネストさせる一番の理由はアソシエーション先のレコードの`id`を`params`に追加してコントローラに送るため**

###[部分テンプレート]
同じHTML構造の部分を共通化することによって、無駄なくビューファイルを作成する
この共通化された部分のこと
＊　`部分テンプレートのファイル名は必ず [ _ ] から始まる`

###[renderメソッド]
部分テンプレートを呼び出す際に利用するメソッド

###[render partialオプション]
`renderメソッド`に `:partial`というオプションをつけることで、
明示的に部分テンプレート名を指定し、部分テンプレートを表示することができる

```ruby
  render partial: "sample"
```

###[render localsオプション]
`renderメソッド`にl`ocals`というオプションを用いると部分テンプレート内でその変数を使える

```ruby
render partial: "sample", locals: { app: "oboeta?" }
```