Er du sikker på, at du har defineret klassemetoden search
i item.rb
? Fordi fejlen siger, at der ikke er nogen search
metode defineret på Item
klasse. Prøv dog, om følgende virker for dig.
Du ønsker kun at søge, hvis formularen indsendes. Du kan bruge present?
metode til at vide, om søgetermen faktisk blev bestået.
Rediger din controller til
def index
@items = params[:search].present? ? Item.search(params[:search]) : Item.all
end
Bemærk, at et objekt er present
kun hvis det ikke er tomt. Dette er praktisk, fordi hvis nogen indtaster " " i formularen, skal du ikke søge efter et tomt felt i nombre
felt, men vis alle posterne i items
tabel.
Hvis formularen ikke blev indsendt, Item.all
vil blive udført.
Rediger din klassemetode til
def self.search(search_term)
where("nombre LIKE ?", "%#{search_term}%")
end
Du behøver ikke en Item.where
fordi klassen Item
er den aktuelle kontekst, hvorpå where
metode kaldes. Bemærk, at jeg har ændret mønsteret til %#{search_term}%
fordi du ikke altid ønsker at matche strenge, der ender med et eller andet mønster.
Håber dette hjælper!