20201123_アウトプット(ユーザー管理機能・商品出品機能)
今日行ったこと 13時間半
- ユーザー管理機能の実装(テストコード)👉LGTM✨
- 商品出品機能(テストコードの途中まで)
新しい発見
テストコードの
Faker
のテクニック。半角英数字を入れたい時に、{ '1a' + Faker::Internet.unique.password(min_length: 6) }
とすることで必ず「1a」を含めることができる。(ランダム作成時に、うまく行く時といかない時があった。そんな時に有効!)コマンドでモデルを作成する時、Railsの仕様で自動的に単数形に切り替わることがわかった。(モデルファイルもその名前で生成される。)
ルーティングでパスを指定できるものあるいは7つのアクションのような自動で割り振ってくれるものは、ビューファイルのform_withについて、モデル名だけでOK(反対に指定すると限定的になってしまいHTTPメソッドが違うとエラーになった。)deviseのような指定できないものについては、form_withに、プレフィックスを指定することを理解。
name属性について。検証でみると
name=item[name]
ってなっているものは"「itemモデル」の「name」というname属性"になることを理解。エラー直して再実行するときは、リロードボタンを押すのではなく、「戻る」してから再実行することを理解。
キーとバリューについて。
(1)マイグレーションファイルのカラム名
(2)ビューファイルのname属性
(3)コントローラー(createアクション)のストロングパラメーター
(4)モデルのバリデーション
これらが、基本的に完全一致して、データベースへ保存されることを理解。
※完全一致しないもの(例外)
・ アクティブストレージの:image
(その他諸々を:image
という箱に入れて専用の各テーブルに入れている)
・外部キー(referencesと書いてあるマイグレーションファイルはuser
テーブルから参照という意味合いに変わるのでid
がつかない)
* references
について。既存のテーブルを参照する役割があることを理解。(つまり、今回で言えば、userテーブルを作った後に、itemテーブルを作った。itemテーブルは外部キーとしてuserテーブルを使う。しかし、テーブル作る順番逆だったら「参照元ないよ!」とエラーになる)
references
は、integer型(_id
つける必要あり)でも実装可能なことを知った。しかし、references
キーを使うことで、①参照速度が早くなる②(ちょっとだけど)記述が短くなるメリットがあることを理解。アクティブハッシュはDBないので(参照できないので)
references
は使えない。
感想
10回くらいエラー出たけれど、7回くらい自分で解決できて嬉しかった(昨日に比べるとどこがエラー出ているのか少し分かるようになった)
エラーの内容は、endが足りないとかコンマが足りないとか小さなことだった。アクティブハッシュなどのファイルコピペした時に行数違うときはコンマに要注意だな。
テストコードは、binding.pryの位置間違えると、自分がほしいエラーメッセージを拾えないことを痛感した。
ルーティングエラーは、メンターさんに聞いたおかげで、どこのキーが一致しているのか明確になったため凄く勉強になった。
商品出品機能についても、アクティブハッシュが反映した時、とっても嬉しかった。(アクティブハッシュが失敗していたら嫌だったので、一つ目の実装でビューまで行うようにしたけれど、その際にどこまで実装終わってないからこのエラー出るとなんとなく予測できて嬉しかった。)
300円以上〜半角数字のバリデーションをかける方法について自力で見つけて実装できた時、楽しかった。
テストコードについて、Fakerだと小数点混じるからエラー出るのかなあ。もうちょっとって感じなんだけど実装できなくて悔しいなー。(昨日のひらがな・カタカナなどもgimeiというGem使いこなせなくて悔しかった。)明日朝までやってみて出なかったらメンターさんに聞いて、その後諦めよう。