クラスメソッドsearch
を定義しましたか? item.rb
内 ?エラーの原因は、search
がないことを示しています Item
で定義されたメソッド クラス。ただし、次の方法で問題が解決するか試してみてください。
フォームが送信されている場合にのみ検索します。 present?
を使用できます 検索語が実際に渡されたかどうかを知る方法。
コントローラを次のように変更します
def index
@items = params[:search].present? ? Item.search(params[:search]) : Item.all
end
オブジェクトがpresent
であることに注意してください 空白でない場合のみ。これは、誰かがフォームに「」と入力した場合、nombre
で空のスペースを検索するべきではないため便利です。 フィールドですが、items
のすべてのレコードを表示します テーブル。
フォームが送信されなかった場合は、Item.all
実行されます。
クラスメソッドを次のように変更します
def self.search(search_term)
where("nombre LIKE ?", "%#{search_term}%")
end
Item.where
は必要ありません クラスItem
where
が存在する現在のコンテキストです メソッドが呼び出されます。パターンを%#{search_term}%
に変更したことに注意してください あるパターンで終わる文字列を常に一致させたいとは限らないからです。
これがお役に立てば幸いです!