Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Rails não passando o DB Query no formulário de pesquisa


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!