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

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

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

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

Webサイト

一つのドメイン上に存在するWebページの集合体をWebサイトと呼びます。

Ruby on Rails

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

Q&A

解決済

1回答

1861閲覧

ruby on rails No route matches {:action=>"destroy", :controller=>"orders"} テーブルのカラムが削除できない。

tomato185

総合スコア29

Ruby

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

Webサイト

一つのドメイン上に存在するWebページの集合体をWebサイトと呼びます。

Ruby on Rails

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

0グッド

0クリップ

投稿2020/09/12 09:25

編集2020/09/12 09:30

前提・実現したいこと

Ruby on rails 初心者です。
現在、ECサイトの構築を行っており、つまずいたのは「カート情報」の削除処理です。

cart_itemsテーブルに入っているカート情報を購入が完了した後に該当テーブルのカラムを削除しようと思っております。

ですので、「商品購入」ボタン押下→createアクションaddressesテーブルordrsテーブルに商品情報などを登録→destroyアクションcart_itemsテーブルのカラム情報を削除→top画面へ遷移

という流れを構築しようと考えています。

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

`createアクション`から`destroyアクション`へ遷移されない。 No route matches {:action=>"destroy", :controller=>"orders"} redirect_to action: :destroy ★エラー部分

該当のソースコード

(views/orders/index.html.erb)一部記載 <%= form_for(@address, url: orders_path) do |f|%> <%= f.hidden_field :user_id, value: current_user.id %> <%= f.hidden_field :last_name, value: session[:last_name] %> <%= f.hidden_field :first_name, value: session[:first_name] %> <%= f.hidden_field :furi_last_name, value: session[:furi_last_name] %> <%= f.hidden_field :furi_first_name, value: session[:furi_first_name] %> <%= f.hidden_field :postal_code, value: session[:postal_code] %> <%= f.hidden_field :prefecture, value: session[:prefecture] %> <%= f.hidden_field :address, value: session[:address] %> <%= f.hidden_field :store, value: session[:store] %> <%= f.hidden_field :how_to_pay, value: session[:how_to_pay] %> <%= f.fields_for :orders do |o|%> <% @cart_items.each do |cart_item|%> <% product = Product.find_by(id: cart_item.product_id) %> <%= o.hidden_field :product_id, value: product.id %> <%= o.hidden_field :quantity, value: cart_item.quantity %> <% end%> <% end %> <p><%= f.submit "注文確定", class: 'btn' %></p> <% end %>
(controllers/ordes_controller.rb)★一部記載 def create @address = Address.new(address_params) if @address.save flash[:success] = "購入が完了しました。" session.delete(:store) session.delete(:last_name) session.delete(:first_name) session.delete(:furi_last_name) session.delete(:furi_first_name) session.delete(:postal_code) session.delete(:prefecture) session.delete(:address) session.delete(:how_to_pay) redirect_to action: :destroy else render "index" end end def destroy CartItem.where(cart_id: current_cart).delete_all redirect_to root_path end
(routes.rb) orders GET /orders(.:format) orders#index POST /orders(.:format) orders#create order GET /orders/:id(.:format) orders#show DELETE /orders/:id(.:format) orders#destroy

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

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

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

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

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

guest

回答1

0

ベストアンサー

リダイレクトさせなくても、

session.delete(:how_to_pay) CartItem.where(cart_id: current_cart).delete_all redirect_to root_path else render "index" end end

で良いのでは?

投稿2020/09/12 09:33

編集2020/09/12 09:36
winterboum

総合スコア23329

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

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

tomato185

2020/09/12 09:36

winterboum様 早速のご回答ありがとうございました。 リダイレクト以外というと、renderくらいしか思いつかなく、 renderでもやってみましたが、同じくエラーでした。 どのような方法がございますでしょうか。
winterboum

2020/09/12 09:37

ごめん、操作なんかとちって何も書かないうちに送っちゃいました。 いま書き直しました
winterboum

2020/09/12 09:38

なお CartItem.where(cart_id: current_cart).delete_all でなく current_cart.cart_items.delete_all でも行けるかと
tomato185

2020/09/12 09:39

winterboum様 削除の場合、destroyアクション(HTTPメソッド)を使う必要はないんでしょうか??
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問