前提
RailsでECサイトを作っています。
カート機能の作成にあたっては以下の記事の内容を少し取り入れました。
https://qiita.com/Coolucky/items/89ce3a0f25c9dfdb38c1
ユーザーが未ログイン時でも、カート機能が使えるような使用にしたいと思っています。
Rails 5.2
ログイン機能はdeviseを使用しています。
#エラー内容
ヘッダーのhtml.hamlに”カートを見る”というリンクを設置しています。
エラー画面で言う、
”= link_to cart_path(@cart.id), class: "header__top__nav__cart__link" do”
の部分です。
ユーザーが未ログインでも、カートは使用できるように設定しました。
ここでいう@cartは、以下のように記述しております。
ruby
1 2class ProductsController < ApplicationController 3 before_action :set_cart 4 5 省略 6 7 private 8 def set_cart 9 @cart = current_cart 10 end 11end 12
またcurrent_cartは以下で定義しております。
ruby
1class ApplicationController < ActionController::Base 2 before_action :configure_permitted_parameters, if: :devise_controller? 3 4 rescue_from CanCan::AccessDenied do |exception| 5 render file: "#{Rails.root}/public/403.html", status: 403, layout: false 6 ## to avoid deprecation warnings with Rails 3.2.x (and incidentally using Ruby 1.9.3 hash syntax) 7 ## this render call should be: 8 # render file: "#{Rails.root}/public/403", formats: [:html], status: 403, layout: false 9 end 10 11 private 12 #セッションの作成 13 def current_cart 14 # セッションから取得したcart_idを元にCartテーブルからCart情報を取得 15 @current_cart = Cart.find_by(id: session[:cart_id]) 16 # Cart情報が存在しない場合、@current_cartを作成 17 @current_cart = Cart.create unless @current_cart 18 # 取得したCart情報よりIDを取得し、セッションに設定 19 session[:cart_id] = @current_cart.id 20 # Cart情報を返却 21 @current_cart 22 end 23 24 protected 25 def configure_permitted_parameters 26 devise_parameter_sanitizer.permit(:sign_up, keys: [:nickname]) 27 end 28end
他のページですが、全てのコントローラーに
ruby
1private 2 def set_cart 3 @cart = current_cart 4 end
の記述をしており、問題なくページ遷移ができております。
しかし、ユーザーの認証ページに遷移しようとすると添付のようなエラーが発生しております。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/05/12 04:54
2020/05/12 06:33
2020/05/12 07:44
2020/05/12 07:54
2020/05/12 08:16
2020/05/12 08:24
2020/05/12 08:43