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

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

ただいまの
回答率

88.81%

railsで検索機能 あいまい検索を実装中

受付中

回答 1

投稿

  • 評価
  • クリップ 0
  • VIEW 136

前提・実現したいこと

現在rails で在庫管理のサイトを作成しているところで検索機能を導入し検索できるようにしようとしているよところでエラーなってしまい検索結果が表示できずにいます。

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

NoMethodError in SearchesController#index
undefined method `search' for #<Class:0x00007f84c25e7ec0>
Extracted source (around line #3):
1
2
3
4
5
6

class SearchesController < ApplicationController
  def index
    @items = Item.search(params[:search]).limit(132)
    @search = params[:search]
  end
end

Rails.root: /Users/yukihiro/stock

Application Trace | Framework Trace | Full Trace
app/controllers/searches_controller.rb:3:in `index'
Request
Parameters:

{"utf8"=>"✓", "search"=>"松永"}

該当のソースコード

class SearchesController < ApplicationController
  def index
    @items = Item.search(params[:search]).limit(132)
    @search = params[:search]
  end
end


.search
.search-container
.search-left
= render 'searches/form-bar'
.search-right
%section.items-box-container
-if @search.present?
%h2.search-result-head
=@search
%span.search-result-head-text
の検索結果
.search-result-number
="1-#{@item.count}件表示"
-else
%h2.search-result-nil
新着商品
.items-box-content
= render @item

Rails.application.routes.draw do
  root to: "items#index"
  resources :items, only: [:index, :new,:create, :edit, :destroy, :update, ] 
  resources :searches,only:[:index]



end
.top
  .top_header
    .top_header_name
      NETASTOCKS
    .top_header_search
      = form_tag(searches_path,method: :get) do
        = text_field_tag :search, "",placeholder:"何かお探しですか?"
        = submit_tag 'search', :name => nil
    検索 
  .top_main
    .top_main_text
      ネタ在庫一覧
    .top_main_btn
      =link_to "追加",new_item_path
    .top_main_stock
      .top_main_stock_box
        .top_main_stock_box_type
          .type_name
            ネタ名
          .type_capacity
            内容量
          .type_unit
            単位
          .type_quantity
            個数
          .type_place
            場所
          .type_delivery
            納品日
          .type_edit
            編集
        - @items.each do |item|
          .top_main_stock_box_item
            .item_name
              = item.name
            .item_capacity
              = item.capacity
            .item_unit
              = item.until
            .item_quantity
              = item.quantity
            .item_place
              = item.place
            .item_delivery
              = item.deliverydate
            .item_edit
              =link_to "編集","/items/#{item.id}/edit", method: :get
        = paginate @items
class ItemsController < ApplicationController
  PER = 8
  def index
    @items = Item.page(params[:page]).per(PER)
  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 destroy
    item = Item.find(params[:id])
    item.destroy
    redirect_to root_path
  end

  def edit
    @item = Item.find(params[:id])
  end

  def update
    @item = Item.find(params[:id])
    if @item.update(item_params)
       redirect_to root_path
    else
       redirect_to edit_item_path(item.id)
    end
  end


  def self.search(search)
    return Item.all unless search
    Item.where(['name LIKE ?', "%#{search}%"])
  end

試したこと

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

ここにより詳細な情報を記載してください。

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

0

Railsのモデルには search というmethodはありません。
Ransackというgemを入れればあります。
が、使い方がちょっとちがいます。

参考にしているシステムとGemfileを比べてみてください
もしくは Itemにmethodを定義するか、

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

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

  • ただいまの回答率 88.81%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る