Är du säker på att du definierade klassmetoden search
i item.rb
? För felet säger att det inte finns någon search
metod definierad på Item
klass. Testa dock om följande fungerar för dig.
Du vill bara söka om formuläret skickas in. Du kan använda present?
metod för att veta om söktermen faktiskt godkändes.
Ändra din kontroller till
def index
@items = params[:search].present? ? Item.search(params[:search]) : Item.all
end
Observera att ett objekt är present
bara om det inte är tomt. Detta är praktiskt eftersom om någon skriver " " i formuläret, bör du inte söka efter ett tomt utrymme i nombre
men visa alla poster i items
bord.
Om formuläret inte skickades, Item.all
kommer att köras.
Ändra din klassmetod till
def self.search(search_term)
where("nombre LIKE ?", "%#{search_term}%")
end
Du behöver ingen Item.where
eftersom klassen Item
är det aktuella sammanhanget där where
metod kallas. Observera att jag har ändrat mönstret till %#{search_term}%
eftersom du inte alltid vill matcha strängar som slutar med något mönster.
Hoppas detta hjälper!