sql >> Base de Datos >  >> RDS >> Mysql

Los rieles no pasan la consulta DB en el formulario de búsqueda

¿Estás seguro de haber definido el método de clase search? en item.rb ? Porque el error dice que no hay search método definido en el Item clase. Sin embargo, intente si lo siguiente funciona para usted.

Solo desea buscar si se está enviando el formulario. Puedes usar el present? método para saber si el término de búsqueda realmente se aprobó.

Modifica tu controlador a

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

Tenga en cuenta que un objeto está present solo si no está en blanco. Esto es útil porque si alguien ingresa " " en el formulario, no debe buscar un espacio vacío en el nombre pero muestra todos los registros en los items mesa.

Si no se envió el formulario, Item.all será ejecutado.

Modifica tu método de clase a

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

No necesitas un Item.where porque la clase Item es el contexto actual en el que where se llama el método. Tenga en cuenta que he cambiado el patrón a %#{search_term}% porque no siempre desea hacer coincidir las cadenas que terminan con algún patrón.

¡Espero que esto ayude!