Para empezar, sé que lo que estoy tratando de hacer no es algo típico de Rails. Estoy abierto a sugerencias para mejores alternativas. Soy novato con Rails así que las sugerencias son bienvenidas 🙂
Básicamente, tengo una barra de notificaciones que tiene 5 notificaciones. Después de que un usuario haga clic y vea las notificaciones, deseo establecer una columna en la base de datos llamada “true”.
Aquí está mi función Jquery:
$(document).ready(function(){ $("button").click(function(){ $("div#count").html(""); }); });
Y aquí está el código que estoy intentando ejecutar solo después del clic (ubicado en _notification_count.html.erb)
Sin embargo, parece que este código se ejecuta automáticamente cuando se carga la página y no después del clic. Cual es mi problema
En primer lugar, no puede simplemente adjuntar una render
a su botón para realizar cambios en su base de datos (ya sea una lectura o una escritura). Debe hacer una llamada AJAX a su controlador usando algo como
$.ajax({ url: "/path/to/your/method", type: "GET", dataType: "script" });
Y en su controlador usted manejará lo que necesita hacer y luego renderizará su archivo js con una
respond_to do |format| format.js {render 'shared/notification_count'} end
Esto se debe a que cuando un usuario hace clic en su botón, el código se ejecutará en el lado de los clientes, pero si nunca realiza una solicitud al servidor, no podrá ver la versión actualizada de su base de datos. Le sugiero que lea más sobre esto , eso me ayudó mucho.
El contenido de sus archivos .erb son simplemente plantillas: se evalúan en el momento de la carga. Si desea que la interacción del usuario active algún comportamiento, debe hacerlo únicamente en javascript. Como resultado, la forma en que se producen las interacciones de la base de datos es en esta cadena:
Básicamente, en su modelo necesita tener un código para disparar esas notificaciones. El controlador le pedirá al modelo que lo haga solo cuando reciba una solicitud del usuario / vista para hacerlo.