20201209_アウトプット(商品購入機能)

アプトプット画像

今日行ったこと 4時間

  • 商品購入機能の実装(トークンをサーバーサイドに送る実装・ビューにおける条件分岐)

    新しい発見

トークンをサーバーサイドに送りたい

  • JavaScriptにおいて、トークンは発行できているものの、サーバーサイドに送られずToken can't be blankになってしまうエラーで昨日の夜からつっかえていた。

結果、以下のストロングパラメーターで解決できた。

  def order_params
    params.require(:order_form).permit(:postcode, :prefecture_id, :city, :block, :building, :phone_number).merge(user_id: current_user.id, item_id: params[:item_id], token: params[:token])
  end

トークンの記述としては、
(1)binding.pryでorder_paramsを確認した時に、tokenは{{}}内ではないため「merge」とする。
(2)そのままbinding.pryで、params[:token]等と、トークンが発行できるものを「バリュー」として設定する。
(3)フォームオブジェクトのattr_accessorと、validatesに設定する。

新しい気づきとしては、
●priceはamount: @item.priceとして、PAYJPに送る形で実装可能だったこと。
●具体的にいうと、今回は、orderコントローラーと(priceがある)itemコントローラーに分かれていたため、priceをキーとして無理してストロングパラメーターに載せたり、attr_accessorと、validatesに記述しなくてよかったことを理解。



条件分岐をしたい 👉エラー未解決

実装の条件である、
(1)出品者はURLを直接入力して購入ページに遷移しようとすると、トップページに遷移すること。
(2)URLを直接入力して購入済み商品の購入ページへ遷移しようとすると、トップページに遷移すること。
を確認したら、実装できてなかった😱👉ビューの条件分岐で悩む。


【悩んでいるところ】
●可読性の観点からif文のif文(入れ子)になるべくしたくない
●「購入ずみ」はインスタンス変数と.present?を使うのかな?
👉一番は条件分岐がわからない(いけた!と思っていても漏れている)



感想

  • 実装終わった!と思ってプルリクエストし、コードレビュー依頼する際にチェックしたら、モデル単体テストコードにトークン入れ忘れているし、条件分岐実装できていないし、穴だらけだった😱ショック。そして、テストコードあると確認楽なことをまた実感した。



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

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


  • エラー解決

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

  • 環境変数(OSの知識)

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

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

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

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

  • リファクタリング

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

  • Docker

  • gimei(Gem)