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

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

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

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

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

Ruby on Rails

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

Q&A

解決済

2回答

2164閲覧

ActiveRecord::RecordNotFound in ItemsController#show のエラーを解決したい

ntk__7__ksn

総合スコア14

Ruby

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

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

Ruby on Rails

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

0グッド

0クリップ

投稿2020/08/18 02:53

#前提・実現したいこと
チーム開発をしていて、商品を削除する実装をしています。

mysqlに直接データを入力しましたのでデータはいくつか入っています。
データはあるのになぜレコードがないというエラーが出るのでしょうか?
検索しても直し方が分からず解決できませんでした。

わかる方がいらっしゃいましたら教えてくださると助かります。
#発生している問題・エラーメッセージ

ActiveRecord::RecordNotFound in ItemsController#show Couldn't find Item with 'id'=destroy Extracted source (around line #102): def get_item @item = Item.find(params[:id]) end end Application Trace | Framework Trace | Full Trace app/controllers/items_controller.rb:102:in `get_item' Request Parameters: {"id"=>"destroy"} Toggle session dump Toggle env dump Response Headers: None

#該当のソースコード

controller

1class ItemsController < ApplicationController 2 before_action :authenticate_user!, except: [:index, :show] 3 4 before_action :get_categories 5 6 before_action :get_item, except: [:index, :new, :create] 7 8 def index 9 @items = Item.includes(:images).order('created_at DESC').limit(5) 10 end 11 12 def show 13 end 14 15 16 def new 17 @category_array = [] 18 @categories.each do |category| 19 category.children.each do |child| 20 child.children.each do |gchild| 21 @category_array << [category.name, category.id] 22 @category_array << [child.name, child.id] 23 @category_array << [gchild.name, gchild.id] 24 end 25 end 26 end 27 @item = Item.new 28 @item.images.new 29 end 30 31 def create 32 @item = Item.new(item_params) 33 if @item.save 34 redirect_to root_path 35 else 36 render :new 37 end 38 end 39 40 def edit 41 end 42 43 def update 44 if @item.update(item_params) 45 redirect_to root_path 46 else 47 render :edit 48 end 49 end 50 51 def destroy 52 if @item.destroy 53 redirect_to root_path 54 else 55 render :edit 56 end 57 end 58 59 def confirmation 60 @user = User.find(current_user.id) 61 end 62 require "payjp" 63 def pay 64 if @item.stage != "selling" 65 redirect_to item_path(params[:id]) 66 else 67 @item.with_lock do 68 if current_user.credit_card.present? 69 @card = CreditCard.find_by(user_id: current_user.id) 70 Payjp.api_key = Rails.application.credentials.dig(:payjp, :PAYJP_SECRET_KEY) 71 charge = Payjp::Charge.create( 72 amount: @item.price, 73 customer: Payjp::Customer.retrieve(@card.customer_id), 74 currency: 'jpy' 75 ) 76 else 77 Payjp::Charge.create( 78 amount: @item.price, 79 card: params['payjp-token'], 80 currency: 'jpy' 81 ) 82 end 83 @purchase = Purchase.create(user_id: current_user.id, item_id: params[:id]) 84 item = Item.find(params[:id]) 85 item.update(stage: 1) 86 redirect_to root_path 87 end 88 end 89 end 90 91 private 92 def get_categories 93 @categories = Category.where(ancestry: nil) 94 end 95 96 def item_params 97 params.require(:item).permit(:name, :price, :size, :condition, :brand, :stage, :detail, :category_id, :prefecture, :fee, :delivery_date, images_attributes: [:image, :destroy, :id]).merge(user_id: current_user.id) 98 end 99 100 def get_item 101 @item = Item.find(params[:id]) 102 end 103end 104
.Top .Top__header %a{href: "#"} %img{alt: "FURIMA", src: "/assets/logo-9486ef715c62ec78e487e9fd713395dee60de0966916f621cbc19d0462dbf03b.png", :width: "400", height: "100"}/ .success %h2 削除が完了しました %a.btn{:href: "/"} トップへ戻る

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

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

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

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

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

guest

回答2

0

Couldn't find Item with 'id'=destroyとあるとおりです。間違えて/items/destroyのようなリンクを作ってしまっているのではないでしょうか。

投稿2020/08/18 02:55

maisumakun

総合スコア145121

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

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

maisumakun

2020/08/18 02:58

resourcesで標準的なルーティングを引いた場合、Items#destroyは/items/(ID)へのDELETEリクエストを投げて呼び出します。
ntk__7__ksn

2020/08/18 03:09

vsコードで検索をかけ/items/destroyやdestroy_item_pathなどと探してみましたがdestroyを使ったリンクの記述はありませんでした。 ただ、 destroy_user_session_path の記述はしてありました。 これは関係ないと思っているのですが今回のエラーに関係ありますでしょうか? これがこのエラーに関係あるかわかりませんが、 rails routesでitems#destroyのとこを確認したところPrefixのとこに記述が無い状態でした。
ntk__7__ksn

2020/08/18 03:12

routes.rbのitemsの部分です。 resources :items do member do get 'confirmation', to: "items#confirmation" post 'pay', to: "items#pay" end end
ntk__7__ksn

2020/08/18 03:14

DELETEリクエストを投げて呼び出しますとはjqueryを使って実装するものでしょうか?
maisumakun

2020/08/18 03:16

> DELETEリクエストを投げて呼び出しますとはjqueryを使って実装するものでしょうか? jquery-ujsあるいはrails-ujsが必要です。
guest

0

自己解決

urlにlocalhost:3000/items/destroyと打っていたのですが、今回は削除する商品のidも入れないといけなかったのでlocalhost:3000/items/1/destroyなどと打ったら今回のエラーは解決できました。
小さなミスでした。

投稿2020/08/18 11:59

ntk__7__ksn

総合スコア14

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問