Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Rails bestehen die DB-Abfrage im Suchformular nicht

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!