Mysql
 sql >> Base de données >  >> RDS >> Mysql

Rails ne transmettant pas la requête DB sur le formulaire de recherche

Êtes-vous sûr d'avoir défini la méthode de classe search dans item.rb ? Parce que l'erreur indique qu'il n'y a pas de search méthode définie sur le Item classer. Cependant, essayez si ce qui suit fonctionne pour vous.

Vous ne souhaitez rechercher que si le formulaire est en cours de soumission. Vous pouvez utiliser le present? méthode pour savoir si le terme de recherche a bien été passé.

Modifiez votre manette pour

def index
  @items = params[:search].present? ? Item.search(params[:search]) : Item.all
end

Notez qu'un objet est present seulement si ce n'est pas vide. C'est pratique car si quelqu'un entre " " dans le formulaire, il ne faut pas chercher un espace vide dans le nombre champ mais affiche tous les enregistrements dans les items tableau.

Si le formulaire n'a pas été soumis, Item.all sera exécuté.

Modifiez votre méthode de classe en

def self.search(search_term)
  where("nombre LIKE ?", "%#{search_term}%")
end

Vous n'avez pas besoin d'un Item.where car la classe Item est le contexte courant sur lequel le where méthode est appelée. Notez que j'ai changé le modèle en %#{search_term}% car vous ne voulez pas toujours faire correspondre les chaînes se terminant par un motif.

J'espère que cela vous aidera !