Day3 セッション・管理ユーザ機能作成

今日はログインログアウト機能・ユーザ更新・削除・一覧表示機能の枠組みを実装した。
#Validationメッセージのカスタマイズ
Validationのエラーメッセージは、モデルのerrors変数に自動的に入り、それを使ってエラーメッセージを表示させるが、好きなメッセージにしたいときは、:messageをValidationで使う。
<img width="697" alt="スクリーンショット 2020-01-13 2.08.36.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/565105/7c15788e-f6ee-9d46-6a55-ba15b036a5e7.png">

#renderとredirect_toの使い分け
##render
renderは、まずコントローラ等を介さず、直接対象のビューファイルを読み込む。だから例えば、対象のビューファイルでオブジェクトを使うことを前提にしているのに、renderでなにも用意せずに遷移させてしまうと下のようなエラーがでてしまう。（エラー内容はなにかビューファイルに渡すものを忘れていないかと教えてくれている）
<img width="1197" alt="スクリーンショット 2020-01-13 0.54.33.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/565105/35c30f4e-338a-ec42-de01-a5d3836fa258.png">
これを解決するには、renderの前に@user=User.new等であちら側が期待しているものを用意してから遷移させれば問題はない。
##redirect_to
redirect_toは、データになにかしらの変化が生じたときに使うのが良い。例えばデータの作成・更新・削除など。また、redirect_toはhttpリクエストを送信していることもrenderとの違いであるらしい。https://qiita.com/morikuma709/items/e9146465df2d8a094d78
#Link_toのdeleteメソッド指定が効かない問題
link_to"",path,method: :deleteなどで、httpリクエストを指定するが、なぜかエラーが生じてしまっていた。htmlリソースを見てもしっかりとdeleteで読み込めていたため、他に同じ問題にあたった人がいないか調べるとたくさん出てきた。暫定的な処置としてbutton_toで解決できるとのことだったため、それで一応解決はしているが、デザインのバランスは崩壊してしまった。
ボタンデザインにするのか、はたまた別の解決策を探してボタンを止めるのか考える必要がある。
https://qiita.com/natu_kumo_/items/8ef3343fda6715ed1d1a
#数字の桁数のValidation
このウェブサービスでは身長・体重をデータとして扱うが、桁数を最大５桁までとしたかった。モデルを設計する段階で、数字の桁数を数えるには一度文字に変換する必要があるとの情報があったためValidationの前に文字に変換していた。

before_validation { self.height = height.to_s}
before_validation { self.weight = weight.to_s}

が、実際には文字にしなくても桁数をしっかりと数えてくれていることがわかったため、上のコードは削除した。
また、ユーザーが身長・体重を登録する際に誤って全角数字で入力してしまった際、numericalityのValidationでは「数値が不正です」という不親切な表示しかなく、具体的に何がいけないのかユーザはわかりにくいと感じた。
そのため、上述した:messageを使ってエラー内容をカスタマイズし、「身長・体重は半角数字で入力してください」と明示することにより、よりわかりやすくエラーを表示させるよう改善した。
<img width="546" alt="スクリーンショット 2020-01-12 13.46.24.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/565105/d7b61594-7f4d-9884-7a39-637c574826cb.png">
#seedsのちょっとしたコマンド
height,weightのところは、指定した数字の間の数をサンプルユーザーのデータとして登録させている。
本当は身長にあった体重のようなロジックを書きたいが、どのように書けばいいのだろうか。課題である。
<img width="579" alt="スクリーンショット 2020-01-13 0.01.00.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/565105/9eb50a00-2977-2a1d-780c-ef5cde48977c.png">
#ルーティング確認の重要性
今日の作業ではルーティングを随時確認することが大事であると実感した。コントローラとアクションの関係を把握するのにももちろんのこと、redirect_toのURLの確認や、renderの対象ファイルの確認等にも効果的であった。
<img width="1100" alt="スクリーンショット 2020-01-13 0.42.29.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/565105/ac61656b-0fff-9bae-71c6-9857a419ed02.png">

#課題
##redirect_to userが機能しない
下のエラーは、新規登録をしたときのエラーである。具体的には二つ目の画像のリダイレクト先であるユーザのプロフィールページに繊維できていませんというエラーであるが、Rails Tutorialでよくあった"redirect_to @user"でそのプロフィールページ（Railsがuser/:idとみなしてくれる）に遷移するというものを使っているが、それがうまく機能しなくなってしまった。
エラー詳細を見ると、本来/であるべき場所が.になってしまっている。原因はわからず、対策としてはredirect_to userとするのではなく、redirect_to user/#{params:id}とすることでちゃんと動くようにはなった。
しかし、今日作業をするときはしっかり動いていたのに、最後の方になって動かなくなったということはどこかが悪さをしていると思われ、それが直っていないとどこでまた問題になるかわからないため早急に解決する必要がありそうだ・・・・。
<img width="542" alt="スクリーンショット 2020-01-13 1.20.22.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/565105/bd307d0d-bd25-ab35-f806-89b31a995c70.png">
<img width="678" alt="スクリーンショット 2020-01-13 1.20.33.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/565105/ceca681d-8a28-1eb0-0fa6-ca0ec3f91e64.png">
##その他課題
・Form、!current_user.nil?、変数展開、params[:id]の復習
#感想
・テストはなるべく細分化するべきだと思った。たくさん実装してテストをしてもエラーだらけになってしまう。それなら少しずつ実装してテストして、一つ一つクリアした方がエラーの原因の切り分けも楽だし効率的だと思った。
・学んだこと等をまとめるときは次からQiitaのストック機能を使おう。メモ帳でまとめていたが時間が経ってよく覚えていなかったり、スクショが整理できていなかったりする。