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?
を使うのかな?
👉一番は条件分岐がわからない(いけた!と思っていても漏れている)
感想
- 実装終わった!と思ってプルリクエストし、コードレビュー依頼する際にチェックしたら、モデル単体テストコードにトークン入れ忘れているし、条件分岐実装できていないし、穴だらけだった😱ショック。そして、テストコードあると確認楽なことをまた実感した。