Sind Sie sicher, dass Sie die Klassenmethode search
definiert haben? in item.rb
? Weil der Fehler besagt, dass es keine search
gibt Methode, die auf dem Item
definiert ist Klasse. Versuchen Sie jedoch, ob Folgendes für Sie funktioniert.
Sie möchten nur suchen, wenn das Formular gesendet wird. Sie können den present?
verwenden Methode, um festzustellen, ob der Suchbegriff tatsächlich übergeben wurde.
Ändern Sie Ihren Controller zu
def index
@items = params[:search].present? ? Item.search(params[:search]) : Item.all
end
Beachten Sie, dass ein Objekt present
ist nur wenn es nicht leer ist. Das ist praktisch, denn wenn jemand " " in das Formular eingibt, sollten Sie nicht nach einem leeren Platz im nombre
suchen Feld, aber alle Datensätze in den items
anzeigen Tabelle.
Wenn das Formular nicht gesendet wurde, Item.all
wird ausgeführt.
Ändern Sie Ihre Klassenmethode in
def self.search(search_term)
where("nombre LIKE ?", "%#{search_term}%")
end
Sie brauchen kein Item.where
weil die Klasse Item
ist der aktuelle Kontext, in dem where
Methode aufgerufen wird. Beachten Sie, dass ich das Muster in %#{search_term}%
geändert habe weil Sie nicht immer Zeichenfolgen finden möchten, die mit einem bestimmten Muster enden.
Hoffe, das hilft!