Сигурни ли сте, че сте дефинирали метода на класа search в item.rb ? Защото грешката казва, че няма search метод, дефиниран в Item клас. Все пак опитайте дали следното работи за вас.
Искате да търсите само ако формулярът се изпраща. Можете да използвате present? метод, за да разберете дали думата за търсене действително е била предадена.
Променете вашия контролер на
def index
@items = params[:search].present? ? Item.search(params[:search]) : Item.all
end
Обърнете внимание, че даден обект е present само ако не е празно. Това е удобно, защото ако някой въведе „ “ във формуляра, не трябва да търсите празно място в nombre поле, но показват всички записи в items таблица.
Ако формулярът не е изпратен, Item.all ще се изпълни.
Променете метода на вашия клас на
def self.search(search_term)
where("nombre LIKE ?", "%#{search_term}%")
end
Нямате нужда от Item.where защото класът Item е текущият контекст, върху който where методът се нарича. Имайте предвид, че промених модела на %#{search_term}% защото не винаги искате да съпоставяте низове, завършващи с някакъв шаблон.
Надявам се това да помогне!