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

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

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

Cloud9は、クラウドからのプログラミングが可能になるWebサービス。IDEとしての機能が搭載されており、GitHubやHerokuなど他ツールとの連携も可能です。ブラウザ上で動くため、デバイスに関係なく開発環境を準備できます。

Ruby

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

Ruby on Rails 6

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

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

解決済

カート内の商品をすべて削除する(空にする)機能を実装したい

pi-nattu
pi-nattu

総合スコア61

Cloud9

Cloud9は、クラウドからのプログラミングが可能になるWebサービス。IDEとしての機能が搭載されており、GitHubやHerokuなど他ツールとの連携も可能です。ブラウザ上で動くため、デバイスに関係なく開発環境を準備できます。

Ruby

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

Ruby on Rails 6

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

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

2回答

0リアクション

0クリップ

489閲覧

投稿2022/09/26 13:38

編集2022/09/27 13:28

前提

課題でECサイトのケーキ屋ショッピングサイトを作成しています。
以下エラー文とコードです。エラー解決のためによろしくお願いします。

実現したいこと

  • カート内の商品を空にする機能の実装(カートの商品をすべて削除する)を実現したいです。

発生している問題・エラーメッセージ

NoMethodError in CartItems#index undefined method `destroy_all' for "/cart_items":String

該当のソースコード

ruby/cart_item/index_html.erb

<%= link_to "カートを空にする", cart_items_path.destroy_all, method: :delete, "data-confirm" => "本当に空にしますか?" %><br>

ruby/cart_items_controller.rb

def destroy_all CartItem.destroy_all current_customer.cart_item.destroy_all redirect_to cart_items_path, notice: 'カートが空になりました。' end

試したこと

コントローラーの定義をカリキュラムや検索をしてていぎしてみました。
が、エラーの解決には至りませんでした。

補足情報(FW/ツールのバージョンなど)

ruby/cart_items/index_html.erb

<h1>お客様カート</h1> <div> <table> <thead> <tr> <th>商品画像</th> <th>商品名</th> <th>単価(税込)</th> <th>数量</th> <th>小計</th> <th></th> </tr> </thead> <tbody> <% @cart_items.each do |cart_item| %> <tr> <td><%= image_tag cart_item.item.get_item_image(100,100) %></td> <td><%= cart_item.item.name %></td> <td><%= cart_item.item.with_tax_price %>円</td> <td><%= cart_item.amount %></td> <td><%= cart_item.subtotal %>円</td> <td><%= link_to "削除", cart_item_path(cart_item.id), method: :delete, "data-confirm" => "本当に削除しますか?" %></td> </tr> <% @total += cart_item.subtotal %> <% end %> </tbody> </table> <p>合計金額(税込)<%= @total %>円</p> <%= link_to "買い物を続ける", items_path %><br> <%= link_to "カートを空にする", cart_items_path.destroy_all, method: :delete, "data-confirm" => "本当に空にしますか?" %><br> </div>

ruby/cart_items_controller.rb

class CartItemsController < ApplicationController def index @cart_items = CartItem.all @items = Item.all @cart_item = @items.all #合計金額の初期値は0円 @total = 0 end def create @cart_item = CartItem.find_by(item_id: params[:cart_item][:item_id]) if @cart_item #カートにitemが存在したらamountに新しいCart_itemのamountを足す @cart_item.amount += CartItem.new(cart_item_params).amount else #カートにitemが無ければ新しく作成する @cart_item = CartItem.new(cart_item_params) end #ログインcustomerのみ更新できるようにするため分岐の外に記述する @cart_item.customer_id = current_customer.id @cart_item.save! redirect_to cart_items_path end def update @cart_item = current_customer @item = Item.all @cart_item.update(cart_item_params) redirect_to cart_items_path end def destroy @cart_item = CartItem.find(params[:id]) @cart_item.destroy! redirect_to cart_items_path end def destroy_all CartItem.destroy_all current_customer.cart_item.destroy_all redirect_to cart_items_path, notice: 'カートが空になりました。' end private def cart_item_params params.require(:cart_item).permit(:item_id, :amount) end end

ruby/items_controller.rb

class ItemsController < ApplicationController def index @items = Item.all @genres = Genre.all end def show @item = Item.find(params[:id]) @cart_item = CartItem.new end def item_params params.require(:item).permit( :name, :item_image, :introduction, :item_price, :genre_id) end end

追記▼

ruby/routes.rb

Rails.application.routes.draw do devise_for :admin, skip:[:registrations, :passwords] ,controllers: { sessions: "admin/sessions" } get '/' => 'homes#top' get '/about' => 'homes#about' #customer用itemのパス resources :items, only: [:index, :show] namespace :admin do get '/' => 'homes#top' resources :items, only: [:new, :create, :index, :show, :edit, :update] resources :genres, only: [:index, :edit, :create, :update] end #顧客用 devise_for :customers,skip: [:passwords], controllers: { registrations: "public/registrations", sessions: 'public/sessions' } #顧客情報関連 get '/customers/my_page' => 'customers#show' get '/customers/infomation/edit' => 'customers#edit' patch '/customers/infomation/up_date' => 'customers#update' get '/customers/unsubscribe' => 'customers#unsubscribe' patch '/customers/withdraw' => 'customers#withdraw' #カート関連 delete '/cart_items/destroy_all' => 'cart_items#destroy_all', as: 'destroy_all_cart_items' resources :cart_items, only: [:index, :update, :destroy, :create] # 管理者用 # For details on the DSL available within this file, see https://guides.rubyonrails.org/routing.html end

ruby/cart_items_html.erb変更しました

<%= link_to "カートを空にする", destroy_all_cart_items_path, method: :delete, "data-confirm" => "本当に空にしますか?" %><br>

以下のような質問にはリアクションをつけましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

リアクションが多い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

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

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

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

下記のような質問は推奨されていません。

  • 間違っている
  • 質問になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

適切な質問に修正を依頼しましょう。

m.ts10806

2022/09/26 20:10 編集

HTMLが分かる人が全員RubyやRuby on Railsを分かるわけではないので 質問タグを追加してください。 ※むしろ本件HTMLの影響ってほぼないような
pi-nattu

2022/09/26 20:39

修正依頼ありがとうございます! つけたつもりが失念していました。申し訳ありません。

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
86.12%

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

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

質問する

関連した質問

同じタグがついた質問を見る

Cloud9

Cloud9は、クラウドからのプログラミングが可能になるWebサービス。IDEとしての機能が搭載されており、GitHubやHerokuなど他ツールとの連携も可能です。ブラウザ上で動くため、デバイスに関係なく開発環境を準備できます。

Ruby

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

Ruby on Rails 6

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

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。