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

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

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

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

Ruby on Rails

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

検索

検索は、あるデータの集まりの中から 目的のデータを見つけ出すことです。

Q&A

解決済

1回答

1504閲覧

Couldn't find Item with 'id'=shadow_searchというエラーを解消したい

teruan7110

総合スコア5

Ruby

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

Ruby on Rails

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

検索

検索は、あるデータの集まりの中から 目的のデータを見つけ出すことです。

0グッド

0クリップ

投稿2020/08/26 06:57

前提・実現したいこと

今回ransackのgemを用いて商品の検索機能の実装を行なっていたのですが
shadow_sherch.html.erbにて検索フォームを記述しました
そのあとlocalサーバーを起動しこのshadow_sherch.html.erbのビューに訪れたら今回のエラー文が出てしまいました。

補足として今回作りたい内容としましては
shadow_sherch.html.erbのビューで検索を行いその検索フォームの下に検索結果を羅列したいと思ってます
そのために今回はもう一つ
shadow_sherch.html.erbと同じ記述と検索結果を表示する記述を書いたsherch.html.erbを用いてあたかもshadow_sherch.html.erbのビューで検索したらその下に検索結果が出てきた風にしようと考えてます
Activehashを使っているので今回はそれように検索フォームを記述しています

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

ActiveRecord::RecordNotFound in ItemsController#show Couldn't find Item with 'id'=shadow_search

エラーが出てしまったコード

def set_item @item = Item.find(params[:id]) #この列になります end def back_to_edit

該当のソースコード

items_controller.rb

ruby

1class ItemsController < ApplicationController 2 before_action :set_item, only: [:show, :destroy, :edit, :update] 3 before_action :search_item, only: [:shadow_search, :search] 4 before_action :back_to_edit, only: [:edit] 5 before_action :authenticate_user!, only: [:new, :edit] 6 before_action :back_to_index, except: [:index, :show] 7 8 def index 9 @items = Item.all.order('created_at DESC') 10 end 11 12 def new 13 @item = Item.new 14 end 15 16 def create 17 @item = Item.create(item_params) 18 19 if @item.save 20 redirect_to items_path 21 else 22 render :new 23 end 24 end 25 26 def show 27 end 28 29 def destroy 30 @item.destroy 31 if @item.destroy 32 redirect_to root_path 33 else 34 render :show 35 end 36 end 37 38 def edit 39 end 40 41 def update 42 @item.update(item_params) 43 if @item.save 44 redirect_to item_path(@item.id) 45 else 46 render :edit 47 end 48 end 49 50 def shadow_search 51 @search = Item.all 52 end 53 54 def search 55 @results = @p.result 56 end 57 58 private 59 60 def item_params 61 params.require(:item).permit(:item, :image, :text, :category_id, :status_id, :delivery_burden_id, :shipping_origin_id, :arrival_day_id, :price).merge(user_id: current_user.id) 62 end 63 64 def back_to_index 65 redirect_to action: :index unless user_signed_in? 66 end 67 68 def search_item 69 @p =Item.ransack(params[:q]) 70 end 71 72 def set_item 73 @item = Item.find(params[:id]) 74 end 75 76 def back_to_edit 77 redirect_to item_path(@item.id) unless @item.buy == nil 78 end 79 80 81end

routes.rb

ruby

1 2Rails.application.routes.draw do 3 devise_for :users 4 # For details on the DSL available within this file, see https://guides.rubyonrails.org/routing.html 5 root 'items#index' 6 resources :items do 7 resources :purchases, only:[:index, :create] 8 end 9 get 'items/shadow_search' do 10 get 'items/search' 11 end 12 13end

shadow_sherch.html.erb

ruby

1<%= render "shared/header" %> 2 3<h1> 4 商品検索 5</h1> 6<%= search_form_for @p url: items_search_path do |f| %> 7 <%= f.label :category_id_eq, 'カテゴリー' %> 8 <%= f.collection_select :category_id_eq, Category.all, :category_id, :category.name, include_blank: '指定なし' %> 9 <br> 10 <%= f.submit '検索' %> 11<% end %>

試したこと

idの中にshadow_searchのアイテムが見つかりませんでしたと
いうことだと思うのですが、なぜここでこのエラーが出てしまうのかどうしても理解することができませんでした
このタイプのエラーに対してビューに渡す時変数名が間違っている場合にも出るという記述をみたことがありましたので変数名なども確認したのですがそもそもこの検索フォームにおいてエラーが出ているものの変数は使用しないのではないかと思ってしまって答えにたどり着けません

この度初投稿になります説明に至らない点がございましたら申し訳ありません
初学者ですので至らず申し訳ございません
皆様のお知恵をお貸しいただけると幸いにございます

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

rubyバージョン 6.0.0

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

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

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

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

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

guest

回答1

0

ベストアンサー

resources :itemsの中にget /items/:idが含まれ、/items/shadow_searchもこちらで処理されてしまいます。

get 'items/shadow_search'resources :itemsより先に書いてください。

投稿2020/08/26 07:26

maisumakun

総合スコア145183

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

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

maisumakun

2020/08/26 07:26

ルーティングは、先に書いた方から順にマッチングするか判定されます。
teruan7110

2020/08/26 07:39

ご回答ありがとうございます! 順番を変えましたらこの度のエラーは解消されました! 苦しんでいたので非常に助かりましたありがとうございます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問