20201127_アウトプット(商品情報編集機能)
今日行ったこと 5時間15分
- 商品情報編集機能(エラーハンドリング・出品者だけが編集にアクセスできる)プルリクエストして終了
新しい発見
出品者だけが編集できるにはどうしたらいいの?
衝撃的だったのが、コントローラーでちゃんと定義しないとURLを編集して他人の商品編集ができてしまうこと😱
例え話で言うと、
①Aさん・Bさんの2人がユーザー登録してました。👨👩
②今はAさんでログインしてます👨
③Bさんの詳細画面に行きます👩
④③においてURLに”edit”と追記したら、Aさん👨なのに、Bさん👩の商品の編集ができてしまった!!!(「編集する」ボタンがないだけじゃ不十分なのね!!)
なので、ビューファイルのボタンに出品者か否か変化をつければOK!ではなく、さらにコントローラー上でも「アイテムのユーザー」と「カレントユーザー」が同一か?という条件分岐をしないといけないことを理解。
実装は、コントローラーのeditアクションに定義する。
ユーザーOKだったら何もしない(アクションを実行し、editファイルを読み込む)
NGだったら、ルートパスへ飛ばす
何もしない、というのが新しい気づきだった。
後、ビフォーアクション=最初に読み込まれるから、それより前に、カレントユーザーか確認しないといけない?!と思ったが、
①対象のidのitem見つけます
②あってたらそのままeditします
③あっていなかったらトップページに行かせます
なのでそのままビフォーアクションでいいことを理解。
編集画面においてエラーハンドリングするにはどうすればいいの?
すごくざっくり言うと
(1)ビュー:出品時のデータが表示されるようeditビューファイルで、@itemモデルを第一引数としてform_with
に定義する
(2)コントローラー:情報を保持したいのでインスタンス変数@item
を使って、バリデーションOKかupdate
アクションに定義。
(3)OKであれば、詳細ページへいく。redirect_to
(4)NGであれば、editファイルへいく。render
(5)editファイルへいくと、エラー文がrenderされる定義をしているのでそれが反映され、エラーハンドリングできる。
ここでポイントだと感じたのは、(4)!
出品時の情報をもちつつ、エラーの内容を持って遷移できるrender
を使うのかと理解。
(redirect_to
だとコントローラー経由してしまうので持ちつつ
ができない)
また、ずーっと、(4)でedit_item_path
を指定すると、失敗してもedit画面にならないところに引っかかっていた。render 'edit'
とすることで、ビューファイルを指定できることを理解。
あくまで「アクション」は画面から画面へ遷移する部分を指す。「アクション」後、同じ「ビュー」に遷移するものの、elseでも表示させたい場合には「ビュー」を直接指定することを理解。
editアクション
↓
editビューファイル読み込まれる
↓
「変更する」を押すとupdateアクション
↓
updateした内容で、画面が表示される
間違えてマスターブランチでプッシュ&コミットしてしまった!👉解決方法
カレントブランチを作成していたはずがすっかり忘れて実装してしまった!
さらには、そこに気づかずプッシュ&コミット(;ω;)その解消法!
(1)GitHubデスクトップに戻る
(2)History
で間違えたコミットを右クリックして、Revert this Commit
を押す。(読み方はリバート)
👉イメージで言うと、消せるペンで見え消ししている状態になる。(消しゴムで全て消して見えなくなる訳ではない。)
(3)Current Branch
はmasterブランチ
になっていると思うが、filterに本来作りたかったブランチ名を入力し、New Branch
を押す。Create Branch
を押す。
👉現在のブランチはmasterブランチ
から、本来作りたかったブランチ名
になっているはず
(4)その状態で、Revert 商品情報編集機能の実装
をまた右クリックして、Revert this Commit
を押す。
👉Revert Revert 商品情報編集機能の実装
が差分として作成されると同時に、Publish branch
が押せるようになるはず。
(5)Publish branch
を押すと、本来作りたかったブランチ名において、プルリクエストできるようになる。
(6)いつも通り、プルリクエストする。(すると、本来プルリクエストしたかった内容が、作りたかったブランチでプルリクエストされる🎉)
すごくざっくり言うと「マスターブランチ」で作った内容を消せるペンで見え消し、「本来作りたかったブランチ」を作ってから、消せるペンで見え消ししていたことを、消して元に戻す、ということをした。
感想
削除のところまで行きたかったけど、GitHub間違えて、22時すぎちゃった😭でも、GitHubの失敗から学んだ糧は大きかったので良しとしよう!☺️
今日はいっぱい気づきがあったなあ。特に条件分岐!!!ビューだけじゃ足りないんだ💡💦
アクション=ビューだと思っていたけど、「アクション」があってそれに対応する「ビュー」にいく、という理解が深まった。
最近一気に寒くなって冬の季節が近づいたと感じる☃️温かいお茶を飲みながらプログラミングをしてる🍵(笑)