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!