質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Q&A

解決済

1回答

3253閲覧

railsでの条件分岐をしたい

退会済みユーザー

退会済みユーザー

総合スコア0

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

0グッド

1クリップ

投稿2019/02/08 06:50

# やりたいこと

現在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)が空の時で分岐しているのに、
このようなエラーが出てしまうのでしょうか?

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

current_cartの結果として、なぜか数値の83が返っているためです。

投稿2019/02/08 08:43

asm

総合スコア15147

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2019/02/08 11:54 編集

なぜそうなるのでしょうか。。。 current_cartでインスタンスが生成されていないのが原因なのでしょうか。。 def current_cart if session[:cart_id] @cart = Cart.find(session[:cart_id]) else @cart = Cart.create session[:cart_id] = @cart.id end end current_cartの中身です。。 このメソッドは少し自身がないです。。
退会済みユーザー

退会済みユーザー

2019/02/08 11:56

current_cartメソッドの最後に@cart を追記したらできました。。 どうゆうことかよくわかりません。。
asm

2019/02/08 12:07

if-else式もメソッドと同じで最後に評価した式をif-else式の評価した値とします なのでelse側の最後に@cartが必要です
退会済みユーザー

退会済みユーザー

2019/02/08 12:51

なるほどです。。 ありがとうございます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問