Rialsでネットショップを開発しております。
商品をカートに追加する処理のところでエラーが出てしまい、解決できないため投稿致しました。
具体的には商品ページに設置しているカートに追加するボタンを押すと、Routing Errorが出てしまいます。
正常に商品をカートに追加するためにはどうすればよいでしょうか。
以下コードになります。
ruby
1class CartsController < ApplicationController 2 before_action :setup_cart_item, only: [:add_item] 3 4 5def add_item 6 if @cart_item.blank? 7 @cart_item = current_cart.cart_items.build(product_id: params[:product_id]) 8 end 9 10 @cart_item.quantity += params[:quantity].to_i 11 @cart_item.save 12 redirect_to current_cart 13end 14 15private 16 17 def setup_cart_item 18 @cart_item = current_cart.cart_items.find_by(product_id: params[:product_id]) 19 end
ruby
1class ApplicationController < ActionController::Base 2 3include SessionsHelper 4 5def current_cart 6 if session[:cart_id] 7 @cart = Cart.find(session[:cart_id]) 8 else 9 @cart = Cart.create 10 session[:cart_id] = @cart.id 11 end 12end
ruby
1Rails.application.routes.draw do 2 3 get 'carts/show' 4 get 'carts/add_item' 5 get 'carts/update_item' 6 get 'carts/delete_item' 7 get 'carts/setup_cart_item' 8 9 get 'products/index' 10 get 'products/new' 11 12 get 'sessions/new' 13 14 resources :users 15 get 'users/new' 16 17 root 'static_pages#home' 18 19 20 get '/help', to: 'static_pages#help' 21 get '/about', to: 'static_pages#about' 22 get '/contact', to: 'static_pages#contact' 23 get '/signup', to: 'users#new' 24 post '/signup', to: 'users#create' 25 26 get '/login', to: 'sessions#new' 27 post '/login', to: 'sessions#create' 28 delete '/logout', to: 'sessions#destroy' 29 30 resources :products 31 resources :carts 32 33 post '/add_item' => 'carts#add_item' 34 post '/update_item' => 'carts#update_item' 35 delete '/delete_item' => 'carts#delete_item' 36 37 # For details on the DSL available within this file, see http://guides.rubyonrails.org/routing.html 38end 39
erb
1<h1><%= @product.name%></h1> 2<%= @product.price %> 3 4<%= button_to 'Add to cart', add_item_path(product_id: @product.id) %> 5
こちらは商品ページに表示しているカートに追加するためのボタンです
よろしくお願い致します。
carts_controllerの26行目で、メソッド名が空文字?のメソッドを呼び出そうとしているようです。
26行目がどこなのか目印を書いておくと、回答者の方も回答しやすいと思います。
また、routingエラーということは、呼び出そうとして失敗しているroutingがどこかに書かれていると思いますので、それも書いておくと良いと思います。
回答1件
あなたの回答
tips
プレビュー