Сигурни ли сте, че сте дефинирали метода на класа 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}%
защото не винаги искате да съпоставяте низове, завършващи с някакъв шаблон.
Надявам се това да помогне!