¿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!