Rails: cómo hacer que Jquery actualice una columna de base de datos después de un clic

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:

  1. el usuario hace algo
  2. javascript habla con el controlador (a través de ajax o enviando un formulario)
  3. El controlador obtiene el modelo en cuestión y le pide que haga algo.
  4. El modelo interactúa con la base de datos.

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.