¿Cómo utilizar rack middleware en rieles para autocompletado?

En las aplicaciones web modernas de hoy en día, la finalización automática y las sugerencias automáticas son muy comunes, desde aplicaciones pequeñas hasta aplicaciones muy grandes, atender múltiples solicitudes simultáneamente con una respuesta rápida del servidor es muy importante para que la experiencia del usuario sea mejor y más agradable.

Aquí es donde entra en escena el middleware de rack.

¿Qué es el middleware en rack??

En términos simples, un middleware Rack nos permite hacer cosas antes o después en una aplicación rack. El middleware de rack se inicializa mediante una aplicación de rack y debe responder a un método de llamada.

El middleware de rack puede además ceder el control a otro middleware de rack o simplemente responder con un código de respuesta, tipo de contenido y cuerpo.

1 [200, {'Tipo de contenido' => 'texto/html'},['Hola Web']]

¿Cómo puedes usar esto en una aplicación Rails??

Rieles ya tiene un conjunto predefinido de middlewares Rack para almacenamiento en caché, manejo de sesiones, etc., puede ver los middlewares actuales ejecutando rake middleware.

Aparte de esto, Rails también proporciona una excelente manera de agregar su propio middleware Rack a su aplicación. Usar un middleware Rack para manejar las funciones de autocompletar es fantástico, ya que proporciona un ligero aumento de rendimiento en comparación con manejar la solicitud en un controlador Rails.

Entonces, veamos algo de código sobre cómo lograr esto. Requisito – El usuario debe estar autenticado – Responder con json con el resultado de la consulta – Manejar la respuesta del lado del cliente con javascript.

Ruby Rack Middleware: cree un directorio para middlewares en su aplicación Rails mkdir app/middleware.

Crear un nuevo archivo app/middleware/auto_completer.rb clase AutoCompleter def inicializar(aplicación) @app = app end def call(env) @request = Rack::Request.new(env) if env[“PATH_INFO”] == “ /autocompletar” sesión = @request.env['rack.session'] params = @request.params si sesión && sesión[“user_id”].presente? usuarios = Usuario.select(“id, nombre”).like(params[“q”]) [200, {“Tipo de contenido” => “aplicación/json”}, [usuarios.to_json]] más [404, {“Content-Type” => “text/html”}, [“Not Found”]] end else @app.call(env) end end end.

El código anterior se inicializa con una instancia de la aplicación rack y luego se entrega el control al método de llamada. En el método de llamada, verificamos si la ruta de la solicitud coincide con el autocompletado. Luego verificamos la sesión, encontramos usuarios coincidentes y devolvemos un json con una respuesta 200.

Si la solicitud no coincide con la ruta de solicitud de autocompletar, entregamos el control al otro middleware del rack. Edite su config/application.rb para configurar Rails para que elija el nuevo middleware

config.middleware.insert_after ActionDispatch::Session::CookieStore, “Autocompletador”

Esto le dice a Rails que inserte el nuevo middleware que hemos creado después del middleware de sesión. Ejecute el comando nuevamente para ver que el nuevo middleware se agregó después

ActionDispatch::Session::CookieStore middleware rake

Inicie su servidor Rails y vaya a localhost:3000/autocomplete?q=h

Respuesta esperada [{“id”:2”,nombre”:”Harry”},{“id”:4”,nombre”:”Harold”}]

Javascript Usaremos el complemento jquery-ui para el autocompletado. Incluya jquery-ui en activos/javascript/application.js

Agregue JavaScript a activos/javascript/application.js para realizar la solicitud de autocompletar

$(function() { $.ui.autocomplete.prototype._renderItem = función (ul, artículo) { etiqueta = item.name.replace(new RegExp(“(?![^&;]+;)(?!< [^<>]*)(” + $.ui.autocomplete.escapeRegex(este.término) + “)(?![^<>]*>)(?![^&;]+;)”, “ gi”), “$1“); devolver $(“

  • “) .data(“item.autocomplete”, item) .append(“” + etiqueta + “”) .appendTo(ul); };

$( “#autocomplete”).autocomplete({ fuente: función(req,res){ $.getJSON(“/autocomplete”, { q : req.term }, res) }, minLength: 1, seleccione: función( evento, ui ) { $(“#selected”).append(” Id: ” + ui.item.id + ” Nombre: ” + ui.item.name + “”); } }); });

El primer fragmento de código parchea el método _renderItem en el complemento de autocompletar jQuery-ui para usar el formato json que enviamos desde el servidor.

La segunda parte es bastante sencilla, donde conectamos la llamada de autocompletar a una identificación de elemento html en el DOM.

Observe que hemos utilizado "q" como nombre del parámetro de consulta en lugar del parámetro predeterminado "término".

Controlador de rieles y vista

Generar un nuevo controlador. Los rieles del andamio generan un índice del tablero del controlador.

Editar una nueva plantilla dash/index.html.erb

Aplicación Todo

<

p>Autocompletar

<?php = etiqueta_campo_texto :ID_usuario, nulo, :identificación => "autocompletar" - ?>

Inicie el servidor y vaya http://localhost:3000/dash

Póngase en contacto con nosotros.

Suscríbete para recibir las últimas actualizaciones

Artículos Relacionados

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

es_ESSpanish