ロイの奮闘記録

PdMをやってるロイの日記です。人のつながりを増やしたいと思いながら、社会と奮闘しています

#65 userの登録項目(parameter)を増やす2.2 デバッグも!

#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を入力。その後”登録する”ボタンを押し、

ターミナルで検索

f:id:roi_techs:20190925231933p:plain

 

すると、上記のように表示され、

@user.genderがnilであることが分かる。

 

f:id:roi_techs:20190925232849p:plain

ただ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"を実装

f:id:roi_techs:20190928171712p:plain

 

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
   devise_parameter_sanitizer.permit(:sign_up, keys: [:gender])
 end

 

疑問点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