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

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

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

ファイルシステムからファイル、データベースからレコードを削除することまたはメモリ内のオブジェクトの割り当てを取り消すことをさします。もしくは、HTTPプロトコルのDELETEを指すこともあります。

Ruby on Rails

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

Q&A

解決済

1回答

261閲覧

削除ボタンが使用できない

kabigon

総合スコア3

DELETE

ファイルシステムからファイル、データベースからレコードを削除することまたはメモリ内のオブジェクトの割り当てを取り消すことをさします。もしくは、HTTPプロトコルのDELETEを指すこともあります。

Ruby on Rails

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

0グッド

0クリップ

投稿2020/05/13 03:09

編集2020/05/13 06:11

削除したいIDをURLにうまく読み込めないです。

エラー分
ActiveRecord::RecordNotFound in OrdersController#destroy
Couldn't find UserFood with 'id'=order:id

def destroy
order = UserFood.find(params[:id])
order.destroy
redirect_to root_path
end

###ターミナル

Prefix Verb URI Pattern Controller#Action root GET / orders#index orders GET /orders(.:format) orders#index POST /orders(.:format) orders#create new_order GET /orders/new(.:format) orders#new order DELETE /orders/:id(.:format) orders#destroy

###orders.controller.rb

ruby

1def destroy 2 order = UserFood.find(params[:id]) ←こちら 3 order.destroy 4 redirect_to root_path 5end

###index.html.haml

.right-bar .order-list - @user_foods.each do |user_food| .order-box .order-box__deta .order-box__deta--name = user_food.food .order-box__deta--number = user_food.quantity .order-box__deta--delete = link_to '消', '/orders/order:id', method: :delete ←こちら

order = UserFood.find(params[:id])
ここでparamsの中身を確認したのですがid = order:idのような記述になっておりテーブルからデータをうまく引き出せないです。
他で似たようなエラーのサイトを拝見してhamlの記述を変えたりもしてみたのですが解決できないです。

下のような記述でもうまくいかない

ruby

1#orders.controller.rb 2 def destroy 3 @order = UserFood.find(params[:id]) 4 @order.destroy 5 redirect_to root_path 6 end

haml

1#index.html.haml 2.right-bar 3 .order-list 4 - @user_foods.each do |user_food| 5 .order-box 6 .order-box__deta 7 .order-box__deta--name 8 = user_food.food 9 .order-box__deta--number 10 = user_food.quantity 11 .order-box__deta--delete 12 = link_to "消", order_path(order), method: :delete

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

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

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

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

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

guest

回答1

0

ベストアンサー

id = order:idのような記述になっており

単なる固定文字列で/orders/order:idにアクセスしているので、書いた通りの値がそのまま来ています。

ルーティングを確認してヘルパーを使うことをおすすめします。

投稿2020/05/13 03:32

maisumakun

総合スコア145183

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

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

kabigon

2020/05/13 05:23

愚問かもしれないですがヘルパーを使うとはどういうことでしょうか、、 もう少し教えて頂けるとありがたいです。
maisumakun

2020/05/13 08:28

上にルーティングが出ていましたね。URLのところに「order_path(user_food)」と書いてみましょう。
kabigon

2020/05/13 09:05 編集

動きました!ありがとうございます。 どうして```id```記載なしの```user_food```で読み込めれるのですか? よろしければご教授お願いしますm(__)m
maisumakun

2020/05/13 09:05

> どうして```id```記載なしの```user_food```で読み込めれるのですか? ヘルパーが「数値が来たときはそのままIDとして使う、モデルが来たらIDを抽出する」処理を行っています。
kabigon

2020/05/13 09:16

なるほど!ご丁寧に教えてくださりありがとうございましたm(__)m
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問