Tem certeza de que definiu o método de classe
search
em item.rb
? Porque o erro diz que não há search
método definido no Item
classe. No entanto, tente se o seguinte funcionar para você. Você só deseja pesquisar se o formulário estiver sendo enviado. Você pode usar o
present?
método para saber se o termo de pesquisa foi realmente passado. Modifique seu controlador para
def index
@items = params[:search].present? ? Item.search(params[:search]) : Item.all
end
Observe que um objeto está
present
somente se não estiver em branco. Isso é útil porque se alguém digitar " " no formulário, você não deve procurar um espaço vazio no nombre
mas exibe todos os registros nos items
tabela. Se o formulário não foi enviado,
Item.all
será executado. Modifique seu método de classe para
def self.search(search_term)
where("nombre LIKE ?", "%#{search_term}%")
end
Você não precisa de um
Item.where
porque a classe Item
é o contexto atual no qual o where
método é chamado. Observe que alterei o padrão para %#{search_term}%
porque você nem sempre quer combinar strings que terminam com algum padrão. Espero que isto ajude!