# やりたいこと
現在ECサイトを作成していています。
そこで、ヘッダーのショッピングバックボタンを押した時に、
カートの中に商品が存在している時にはuserが追加した商品の一覧を、
何も追加していない時には[カートは空}ですと表示したいです。
現在できていること
- 追加した商品一覧を表示させること
- カートは空ですの表示
view
1<div class="base"> 2<h6>SHOPPING BAG</h6> 3<% if @cart_items.present? %> 4 <% @cart_items.each do |item| %> 5 <img height="100" src="<%= item.image %>"> 6 <%= item.name %> 7 <%= item.price %> 8 <% end %> 9 <%= button_to 'カートを空にする', @carted, method: :delete, data: {confirm: 'カートを空にして本当によろしいですか?'}, class:" btn btn-warning" %> 10 <%= link_to "購入手続きをする", '/procedure', class:"btn btn-danger" %> 11<% else %> 12 <h5>カートは空です</h5> 13</div> 14<% end %>
controller
1class CartsController < ApplicationController 2 before_action :setup_cart_item!, only: [:add_item, :update_item, :destroy] 3 4 5 def show 6 @cart_items = current_cart.cart_items.flat_map(&:product) 7 end 8 9 def add_item 10 11 if @cart_item.blank? 12 @cart_item = current_cart.cart_items.build(product_id: params[:product_id]) 13 end 14 15 @product = Product.find(params[:id]) 16 @cart_item = current_cart.cart_items.build(product: @product) 17 @cart_item.save 18 redirect_to current_cart 19 end 20 21 def destroy 22 @carted = current_cart 23 @carted.destroy 24 session.delete(:cart_id) 25 redirect_to root_path 26 end 27 28 def procedure 29 end 30 31 def confirm 32 end 33 34 def setup_cart_item! 35 @cart_item = current_cart.cart_items.find_by(product_id: params[:product_id]) 36 end 37end 38
現在のエラー
viewのこの分岐が上手く行きません<% if @cart_items.present? %>
商品が追加されている時にはちゃんと表示されるのですが、カートを空にした場合エラーになってしまいます。
なぜ、@cart_items = current_cart.cart_items.flat_map(&:product)
が空の時で分岐しているのに、
このようなエラーが出てしまうのでしょうか?
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2019/02/08 11:54 編集
退会済みユーザー
2019/02/08 11:56
2019/02/08 12:07
退会済みユーザー
2019/02/08 12:51