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の位置間違えると、自分がほしいエラーメッセージを拾えないことを痛感した。

  • ルーティングエラーは、メンターさんに聞いたおかげで、どこのキーが一致しているのか明確になったため凄く勉強になった。

  • マイグレーションファイルのロールバックもスムーズに一人でできた(2ヶ月前できなかったので嬉しい)

  • 商品出品機能についても、アクティブハッシュが反映した時、とっても嬉しかった。(アクティブハッシュが失敗していたら嫌だったので、一つ目の実装でビューまで行うようにしたけれど、その際にどこまで実装終わってないからこのエラー出るとなんとなく予測できて嬉しかった。)

  • 300円以上〜半角数字のバリデーションをかける方法について自力で見つけて実装できた時、楽しかった。

  • テストコードについて、Fakerだと小数点混じるからエラー出るのかなあ。もうちょっとって感じなんだけど実装できなくて悔しいなー。(昨日のひらがな・カタカナなどもgimeiというGem使いこなせなくて悔しかった。)明日朝までやってみて出なかったらメンターさんに聞いて、その後諦めよう。



これから理解したいこと(覚書用)

  • Formオブジェクト(モデルの存在しないデータを更新)


  • エラー解決

  • カラムの追加方法、ロールバック

  • 環境変数(OSの知識)

  • 環境構築、バージョン対応

  • GitHub(他のアプリケーションと連携・自分に取り入れること)

  • Herokuのデプロイ方法 👉11/15・16学習 50%進む

  • README(DB設計だけでなく、全体について取扱説明書としてどんな風に書くと良いのか)

  • リファクタリング

  • データベースをインポート、エクスポート

  • Docker

  • gimei(Gem)