# 輪読会(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`で書いた方が混乱しなそう。