20201127_アウトプット(商品情報編集機能)

アプトプット画像

今日行ったこと 5時間15分

  • 商品情報編集機能(エラーハンドリング・出品者だけが編集にアクセスできる)プルリクエストして終了



新しい発見

出品者だけが編集できるにはどうしたらいいの?

衝撃的だったのが、コントローラーでちゃんと定義しないとURLを編集して他人の商品編集ができてしまうこと😱

例え話で言うと、
①Aさん・Bさんの2人がユーザー登録してました。👨👩
②今はAさんでログインしてます👨
③Bさんの詳細画面に行きます👩
④③においてURLに”edit”と追記したら、Aさん👨なのに、Bさん👩の商品の編集ができてしまった!!!(「編集する」ボタンがないだけじゃ不十分なのね!!)

なので、ビューファイルのボタンに出品者か否か変化をつければOK!ではなく、さらにコントローラー上でも「アイテムのユーザー」と「カレントユーザー」が同一か?という条件分岐をしないといけないことを理解。
実装は、コントローラーのeditアクションに定義する。

  • ユーザーOKだったら何もしない(アクションを実行し、editファイルを読み込む)

  • NGだったら、ルートパスへ飛ばす


何もしない、というのが新しい気づきだった。
後、ビフォーアクション=最初に読み込まれるから、それより前に、カレントユーザーか確認しないといけない?!と思ったが、
①対象のidのitem見つけます
②あってたらそのままeditします
③あっていなかったらトップページに行かせます
なのでそのままビフォーアクションでいいことを理解。

編集画面においてエラーハンドリングするにはどうすればいいの?

qiita.com

すごくざっくり言うと
(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した内容で、画面が表示される



間違えてマスターブランチでプッシュ&コミットしてしまった!👉解決方法

カレントブランチを作成していたはずがすっかり忘れて実装してしまった!
さらには、そこに気づかずプッシュ&コミット(;ω;)その解消法!
GitHubの画面ハードコピー

(1)GitHubデスクトップに戻る
(2)Historyで間違えたコミットを右クリックして、Revert this Commitを押す。(読み方はリバート)
 👉イメージで言うと、消せるペンで見え消ししている状態になる。(消しゴムで全て消して見えなくなる訳ではない。)
(3)Current Branchmasterブランチになっていると思うが、filterに本来作りたかったブランチ名を入力し、New Branchを押す。Create Branchを押す。
 👉現在のブランチはmasterブランチから、本来作りたかったブランチ名になっているはず
(4)その状態で、Revert 商品情報編集機能の実装をまた右クリックして、Revert this Commitを押す。
 👉Revert Revert 商品情報編集機能の実装が差分として作成されると同時に、Publish branchが押せるようになるはず。
(5)Publish branchを押すと、本来作りたかったブランチ名において、プルリクエストできるようになる。
(6)いつも通り、プルリクエストする。(すると、本来プルリクエストしたかった内容が、作りたかったブランチでプルリクエストされる🎉)

すごくざっくり言うと「マスターブランチ」で作った内容を消せるペンで見え消し、「本来作りたかったブランチ」を作ってから、消せるペンで見え消ししていたことを、消して元に戻す、ということをした。



感想

  • 削除のところまで行きたかったけど、GitHub間違えて、22時すぎちゃった😭でも、GitHubの失敗から学んだ糧は大きかったので良しとしよう!☺️

  • 今日はいっぱい気づきがあったなあ。特に条件分岐!!!ビューだけじゃ足りないんだ💡💦

  • アクション=ビューだと思っていたけど、「アクション」があってそれに対応する「ビュー」にいく、という理解が深まった。

  • 最近一気に寒くなって冬の季節が近づいたと感じる☃️温かいお茶を飲みながらプログラミングをしてる🍵(笑)



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

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


  • エラー解決

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

  • 環境変数(OSの知識)

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

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

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

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

  • リファクタリング

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

  • Docker

  • gimei(Gem)