Czy na pewno zdefiniowałeś metodę klasy search
? w item.rb
? Ponieważ błąd mówi, że nie ma search
metoda zdefiniowana w Item
klasa. Spróbuj jednak, jeśli poniższe rozwiązanie działa dla Ciebie.
Chcesz tylko sprawdzić, czy formularz jest przesyłany. Możesz użyć present?
metoda, aby dowiedzieć się, czy wyszukiwane hasło zostało rzeczywiście przekazane.
Zmodyfikuj kontroler na
def index
@items = params[:search].present? ? Item.search(params[:search]) : Item.all
end
Zauważ, że obiekt jest present
tylko jeśli nie jest puste. Jest to przydatne, ponieważ jeśli ktoś wpisze „ ” w formularzu, nie powinieneś szukać pustego miejsca w nombre
pole, ale wyświetl wszystkie rekordy w items
tabela.
Jeśli formularz nie został przesłany, Item.all
zostanie wykonany.
Zmień metodę klasy na
def self.search(search_term)
where("nombre LIKE ?", "%#{search_term}%")
end
Nie potrzebujesz Item.where
ponieważ klasa Item
jest bieżącym kontekstem, w którym where
wywoływana jest metoda. Zauważ, że zmieniłem wzorzec na %#{search_term}%
ponieważ nie zawsze chcesz dopasowywać ciągi kończące się jakimś wzorem.
Mam nadzieję, że to pomoże!