Rails: Comment faire en sorte que Jquery mette à jour une colonne de firebase database après un clic

Pour commencer, je sais que ce que j’essaie de faire n’est pas typique de Rails. Je suis ouvert aux suggestions pour de meilleures alternatives. Je suis novice avec des rails alors les suggestions sont les bienvenues 🙂

Fondamentalement, j’ai une barre de notifications qui a 5 notifications. Lorsqu’un utilisateur clique et voit les notifications, je souhaite définir la colonne dans la firebase database appelée true.

Voici ma fonction Jquery:

 $(document).ready(function(){ $("button").click(function(){ $("div#count").html(""); }); });  

Et voici le code que j’essaye d’exécuter seulement après le clic (situé dans _notification_count.html.erb)

    

Cependant, il semble que ce code soit exécuté automatiquement au chargement de la page et non après le clic. Quel est mon problème?

Tout d’abord, vous ne pouvez pas simplement attacher un render à votre bouton pour apporter des modifications à votre firebase database (qu’il s’agisse d’une lecture ou d’une écriture). Vous devez faire un appel AJAX à votre contrôleur en utilisant quelque chose comme:

 $.ajax({ url: "/path/to/your/method", type: "GET", dataType: "script" }); 

Et dans votre contrôleur, vous allez gérer ce que vous devez faire, puis restituer votre fichier js avec un

 respond_to do |format| format.js {render 'shared/notification_count'} end 

En effet, lorsqu’un utilisateur clique sur votre bouton, le code est exécuté du côté des clients, mais si vous ne faites jamais une demande au serveur, vous ne pourrez pas voir la version mise à jour de votre firebase database. Je vous suggère de lire plus à ce sujet , cela m’a beaucoup aidé.

Le contenu de vos fichiers .erb sont simplement des modèles: ils sont évalués au moment du chargement. Si vous voulez que l’interaction de l’utilisateur déclenche un comportement, vous devez le faire uniquement en javascript. En conséquence, les interactions entre bases de données se produisent dans cette chaîne:

  1. l’utilisateur fait quelque chose
  2. javascript parle au contrôleur (via ajax ou en soumettant un formulaire)
  3. Le contrôleur obtient le modèle en question et lui demande de faire quelque chose
  4. le modèle interagit avec la firebase database.

Donc, fondamentalement, dans votre modèle, vous devez avoir du code pour déclencher ces notifications. Le contrôleur demandera au modèle de le faire uniquement lorsqu’il recevra une demande de l’utilisateur / vue pour le faire.