#65 9/23,24 userの登録項目(parameter)を増やす2.2
■enumについて
enumとは、
文字列の値を数字として管理することで、静的なオブジェクトとして扱うこと。
文字列ではなく数字を扱うため安全性が確保出来る。また後からの仕様変更も行いやすい。
https://qiita.com/katsu105/items/b8de8c12b80cb1a92ed8
https://qiita.com/tanakaworld/items/ece8718974e14d5a1e55
・モデルに予め登録を行う。
今回
gender string(選択形式)
→0:男性 1:女性
enums:があると、
can not load translationsというエラーが起きる
---
genderの件→users.ymlに記入したら、出力されていた
※users/new.html.erbで入力出来ていないことが要因
小川さん相談
■userの保存段階のcontrollerで、paramsの値を検証する
理由は問題の切り分けを行うため。
1.viewからコントローラーへの受け渡しが上手くいっていない
2. 保存の形式が間違っている
3.保存されているが表示の方法が間違っている
なので、
1.deviseでのuserを保存する、controllerの箇所を探す◎
→registrations_controllerで、userの登録を行っている
2.binding.pryを行う位置とタイミングを考える◎
→今回はregistrations_controller.rbの、
def createのsuperの後に差し込む。
タイミングはアカウント登録画面にいき、項目入力した上で、
binding.pryを入力。その後”登録する”ボタンを押し、
ターミナルで検索
すると、上記のように表示され、
@user.genderがnilであることが分かる。
ただparamsは男性と値が入っている。。
・小川さんめも
本来は数値(例:男性であれば0)がparamsに入っていなければならないはずが、
文字(例:男性)が送られてしまっていることをまずは修正することが必要
→ということはenumあたりが怪しい。
■genderの型がintになっていない→改善したが×
その後chromeのdeveloperツールで、
名前やメールアドレスは<input>
性別は<select>になっていることに気づいた。
■enumではない書き方
<%= f.select :gender, [["男性", "0"], ["女性", "1"] ], :prompt => "選択してください" %>
https://pg-happy.jp/rails-form_for-selectbox.html
最初に戻り、上記のようなenumを用いない書き方 で,gender="0"を実装
0と表示されているものを、
男性、女性と切り分ける
→if文を用いる!?
※”1”と表記するのではなく,1と表記せねば、
数値として認識されない
①registrations_controller.rb
の createアクションの先頭に以下を追加params[:user][:gender] = params[:user][:gender].to_i
②同コントローラーに以下のbefore actionを追加
before_action :configure_sign_up_params, only: [:create]
③同コントローラーに以下のメソッドを追加
def configure_sign_up_paramse
疑問点1
なぜhtmlではstringで入力されてしまうのか。
→基本stringにするもの。という認識で◎
疑問点2
なぜapplication_controllerの場所ではなく、
registration_controllerで,StrongParameterを用いるのか。
→どちらでも良い。
---
enum改善リンク
https://qiita.com/mochikana/items/d31645ff7d51bedc6e84
2つ目の書き方
https://morizyun.github.io/ruby/rails-function-enum-select-tag.html
同じような症状の人
https://matt-note.hatenadiary.jp/entry/2019/03/20/173509