Jste si jisti, že jste definovali metodu třídy search v item.rb ? Protože chyba říká, že neexistuje žádné search metoda definovaná v Item třída. Zkuste však, zda vám následující funguje.
Chcete-li hledat, pouze pokud je formulář odesílán. Můžete použít present? způsob, jak zjistit, zda byl hledaný výraz skutečně předán.
Upravte ovladač na
def index
@items = params[:search].present? ? Item.search(params[:search]) : Item.all
end
Všimněte si, že objekt je present pouze pokud není prázdný. To je užitečné, protože pokud někdo zadá do formuláře „ “, neměli byste hledat prázdné místo v nombre pole, ale zobrazí všechny záznamy v items tabulka.
Pokud formulář nebyl odeslán, Item.all bude proveden.
Upravte svou metodu třídy na
def self.search(search_term)
where("nombre LIKE ?", "%#{search_term}%")
end
Nepotřebujete Item.where protože třída Item je aktuální kontext, ve kterém je where se nazývá metoda. Všimněte si, že jsem změnil vzor na %#{search_term}% protože nechcete vždy porovnávat řetězce končící nějakým vzorem.
Doufám, že to pomůže!