Mysql
 sql >> Database >  >> RDS >> Mysql

Rails che non passano la query DB nel modulo di ricerca

Sei sicuro di aver definito il metodo di classe search in item.rb ? Perché l'errore dice che non c'è search metodo definito su Item classe. Tuttavia, prova se quanto segue funziona per te.

Vuoi cercare solo se il modulo è stato inviato. Puoi usare il present? metodo per sapere se il termine di ricerca è stato effettivamente superato.

Modifica il tuo controller in

def index
  @items = params[:search].present? ? Item.search(params[:search]) : Item.all
end

Nota che un oggetto è present solo se non è vuoto. Questo è utile perché se qualcuno inserisce " " nel modulo, non dovresti cercare uno spazio vuoto nel nombre campo ma visualizza tutti i record negli items tabella.

Se il modulo non è stato inviato, Item.all verrà eseguito.

Modifica il tuo metodo di classe in

def self.search(search_term)
  where("nombre LIKE ?", "%#{search_term}%")
end

Non hai bisogno di un Item.where perché la classe Item è il contesto corrente su cui where viene chiamato il metodo. Nota che ho cambiato il modello in %#{search_term}% perché non vuoi sempre far corrispondere le stringhe che terminano con uno schema.

Spero che questo aiuti!