前提・実現したいこと
rails初心者でオリジナルアプリの開発中です。
検索機能を導入しようとransackのgemを用いて実装したところエラーが起きてしまいました。
検索ボタンを押すとなぜかsearchメソッドではなく、showメソッドが動いてしまって、原因が分かりません。
itemsテーブルとcategoryテーブルがありアソシエーションを組んであります。
今回は投稿したitemをcategory別に検索結果を出したいとおもい実装しています。
よろしくお願いします。
発生している問題・エラーメッセージ
ActiveRecord::RecordNotFound in ItemsController#show Couldn't find Item with 'id'=search Extracted source (around line #69): def set_item @item = Item.find(params[:id]) end
該当のソースコード
apps/contorollers/items_controller.rb
class ItemsController < ApplicationController before_action :authenticate_user!, except: :index before_action :set_item, only: [:show, :edit, :update, :destroy] before_action :set_user, only: [:show, :edit, :update, :destroy] before_action :search_item, only: [:index, :search] def index if user_signed_in? @item = Item.all.where(user_id: current_user.id) @item = @item.order('created_at DESC') set_category_column end end def new @item = Item.new end def create @item = Item.new(item_params) if @item.save redirect_to root_path else render 'new' end end def show end def edit end def update if @item.update(item_params) redirect_to item_path(@item.id) else render 'edit' end end def destroy if @item.destroy redirect_to root_path else render 'show' end end def search @results = @search.result.includes(:category) # 検索条件にマッチした商品の情報を取得 end private def search_item @item = Item.all.where(user_id: current_user.id) @search = @item.ransack(params[:q]) # 検索オブジェクトを生成 end def item_params params.require(:item).permit(:explanation, :category_id, :season_id, :brand, :purchase_day, :price, :place, :image).merge(user_id: current_user.id) end def set_item @item = Item.find(params[:id]) end def set_user unless user_signed_in? && current_user.id == @item.user_id redirect_to root_path end end def set_category_column @category_name = Category.select("name").distinct end end
index.html.erb
<%= search_form_for @search, url: items_search_path do |f| %> <%= f.label :category_name_eq, 'カテゴリー:' %> <%= f.collection_select :category_name_eq, @category_name, :name, :name %> <br> <%= f.submit '検索' %> <% end %>
routes.rb
Rails.application.routes.draw do root to: "items#index" devise_for :users resources :items get 'items/search' end
試したこと
binding.pryを使ってsearchメソッドに記述しましたが止まらないので、やはりうまくsearchメソッドが動いていないみたいです。
よろしくお願いします。
補足情報(FW/ツールのバージョンなど)
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。