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!