rails: comment mettre à jour un has_many: via une relation via jQuery?

Désolé, il s’agit d’une question de noblesse, mais je commence tout juste à utiliser Rails et jQuery. J’ai le scénario suivant:

J’ai 3 classes: contacts, entresockets et contact_company_joins (ccj). Pour les trois classes, j’ai créé des modèles, un contrôleur et des vues. Bien évidemment, les contacts et les entresockets sont connectés via la table join-ccj (en utilisant has_many: through).

contacts contact_company_joins entresockets

Dans la vue “Afficher” de mon contact, je souhaite afficher un tableau répertoriant toutes les sociétés auxquelles le contact est connecté (ainsi que des informations supplémentaires sur la société elle-même, par exemple son numéro de téléphone). De l’avis de mon entreprise, je souhaite faire de même, mais cette fois avec les détails des employés (contacts). Chaque ligne de la table a le lien “delete” typique à la fin, dont j’ai maintenant connecté la fonction à l’une de mes fonctions jQuery:

$('.edit_contact_join_delete').livequery('click', function() { var $deleteButton = $(this); var answer = confirm("Sure?"); var dataloc = "&_method=delete"; if (answer) { $.ajax({ type : "POST", url : this.href, data : dataloc, success: function(result) { } }); } return false; }); 

Dans les deux vues (contact et société), l’action de suppression m’amène à la fonction de destruction du contrôleur ccj. Ce que je veux faire maintenant est de mettre à jour ou de restituer la table du site individuel (contact ou entreprise) qui appelle la fonction de suppression, mais UNIQUEMENT la partie de la table. Je suppose que je dois l’implémenter dans la fonction “succès” ci-dessus? Mais encore une fois, même si je retourne quelque chose du contrôleur de ccj (un rendu partiel?) … ce serait la même chose pour le contact et la vue de l’entreprise, non? Comment puis-je être sûr qu’après mon appel Ajax pour détruire l’object ccj, je reçois un nouvel object DOM pour la vue de mon contact (qui serait une nouvelle table de société), mais aussi une nouvelle table de contacts lorsque je fais l’appel Ajax depuis mon sharepoint vue de l’entreprise?

J’espère que tout cela a du sens 🙂

Cordialement,

Sebastian

Tout ce dont vous avez besoin est que l’action de suppression renvoie un succès ou un échec (même tout à fait vrai ou faux suffira), votre javascript peut alors traiter l’une ou l’autre réponse.

Si un échec renvoie alors un message l’informant de la réussite de l’opération et de la suppression de la relation, vous pouvez trouver le parent

du lien de suppression sur lequel vous avez cliqué et faire disparaître la ligne, puis la supprimer de la page. Par exemple (étant donné que votre contrôleur renvoie true si la suppression est réussie et false sinon):

 $('.edit_contact_join_delete').livequery('click', function() { var $deleteButton = $(this); var answer = confirm("Sure?"); var dataloc = "&_method=delete"; if (answer) { $.ajax({ type : "POST", url : this.href, data : dataloc, success: function(result) { if (result) { // handle successful delete $deleteButton.parent('tr').fadeOut().remove() } else { // handle failed delete alert('Delete failed'); } } }); } return false; });