Weet je zeker dat je de klassenmethode search hebt gedefinieerd? in item.rb ? Omdat de fout zegt dat er geen search is methode gedefinieerd op het Item klas. Probeer echter of het volgende voor u werkt.
U wilt alleen zoeken als het formulier wordt verzonden. Je kunt het present? . gebruiken methode om te weten of de zoekterm daadwerkelijk is doorgegeven.
Wijzig uw controller in
def index
@items = params[:search].present? ? Item.search(params[:search]) : Item.all
end
Merk op dat een object present is alleen als het niet leeg is. Dit is handig, want als iemand " " in het formulier invoert, moet u niet zoeken naar een lege ruimte in de nombre veld maar toon alle records in de items tafel.
Als het formulier niet is ingediend, Item.all zal worden uitgevoerd.
Pas uw klasmethode aan naar
def self.search(search_term)
where("nombre LIKE ?", "%#{search_term}%")
end
Je hebt geen Item.where nodig omdat de klasse Item is de huidige context waarop de where methode wordt genoemd. Merk op dat ik het patroon heb gewijzigd in %#{search_term}% omdat je strings die eindigen op een bepaald patroon niet altijd wilt matchen.
Ik hoop dat dit helpt!