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!