---
# System prepended metadata

title: 輪読会（20201203）
tags: [輪読会]

---

# 輪読会（20201203）
###### tags:`輪読会`
## 今日の学習範囲
P111『3−3-3　詳細表示機能を実装する』 ~ P124 3章終わりまで

## 確認テスト
[![Image from Gyazo](https://i.gyazo.com/e3c10e0a51ea462e4f1ce4ba96c3f03f.png)](https://gyazo.com/e3c10e0a51ea462e4f1ce4ba96c3f03f)

## 応用テスト(by dyson)
ヒント：上の表を参考にしてみよう

- ユーザー登録フォーム
```
<form action="???" method="???">
  <input type="email">
  <input type="text">
  <input type="submit" value="登録">
</form>
```

- ユーザー編集フォーム
```
<form action="???">
  <input type="email">
  <input type="text">
  <input type="submit" value="登録">
</form>
```
※編集フォームについてはちょっと特殊のためactionだけ


## 応用編解答
- ユーザー登録フォーム
```
<form action="/users" method="post">
  <input type="email">
  <input type="text">
  <input type="submit" value="登録">
</form>
```

- ユーザー編集フォーム
```
<form action="/users/:id" method="post">
  <input type="hidden" name="_method" value="patch">
  <input type="email">
  <input type="text">
  <input type="submit" value="更新">
</form>
```


## メモ
#### リクエスト
- 新規作成ページに遷移する時のリクエスト(/users/new)
- 新規作成する時(フォームを送信する時)のリクエスト(/users)
    - この二つを混同している人が多い。分けて考えるべき。
    
- 編集ページに遷移する時のリクエスト(/users/:id/edit)
- 編集（更新）をする時（フォームを送信する時）のリクエスト(/users/:id)
    - 同上。分けて考えるべき。
    - 本来`patch`で送りたいが、実際methodに設定されているのは`post`。隠し項目として`<input type="hidden" name="_method" value="patch">`も一緒に送信することで擬似的にPATCHを実現している

![Image from Gyazo](https://gyazo.com/430d29400c30bf0650e8e50e171fc9aa.png)


#### rails6系でやるとWebpacker周りのエラー？
これは初めてローカルで6系を使うと出るのだろうか？
自分は6系でやってるが問題なく進めてる


#### 5系で通用するけど6系で通用しないコマンドとかもあるんですか？
とりあえず5→6になるとasset pipeline→Webpackerってことくらい
CSSだけはデフォではSprockets管理
そんな気にしなくてもいいかも

#### フォームをレンダーする時になんでインスタンス変数からパーシャル内のローカル変数に代入してるのか
 _form.html.erbは部分テンプレートなので、ローカル変数を渡すことでControllerとの依存度を薄くして他のViewファイルから呼び出す際に扱い易くしているのが理由。ローカル変数として渡すことで、インスタンス変数の定義に依存しない、再利用性の高いパーシャルにすることができる。

以下だいそんさん補足
https://discord.com/channels/694114882764669028/778949532431941632/784253044866023464

#### アラートってフラッシュですか？
フラッシュではないです。
確認ダイアログの制御はこのライブラリのJavaScriptで行われている。
Railsで確認ダイアログを簡単に表示させることができるのは、Railsアプリケーションを新規に生成する際に jquery_ujsというライブラリが組み込まれているから。

#### link_toの引数はpathだけでなくオブジェクトでも指定できる
◯pathを指定する書き方
`= link_to task.name, task_path(task)`

◯オブジェクトを指定する書き方
`= link_to task.name, task`

link_toの書き方でパフォーマンスが変わると思うのだが、(まだ詳しくないです)今は気にせず`path`で書いた方が混乱しなそう。
