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!