[RUBY] Rails Learning jour 4

Ruby on Rails Guide pratique d'apprentissage rapide chapitre 8

8-2 Communiquer avec le serveur Rails avec Ajax

Ajax: Une méthode de programmation Javascript pour une communication asynchrone sur un navigateur web et rafraîchir une page sans recharger la page.

Normalement, même si la page est mise à jour en recevant une requête du serveur, même s'il s'agit d'une page légèrement différente, toutes les parties de la page sont lues et affichées à partir de 1 à chaque fois, mais si vous utilisez Ajax, seule la partie est traitée dynamiquement. Utilise la page telle quelle sans passer par le serveur

Cette fois, le processus de suppression de la tâche sera traité à l'aide d'Ajax. Il existe deux opérations principales effectuées par le traitement Ajax.

① Opération pour supprimer une tâche. (2) Opération pour afficher l'écran de liste qui reflète la tâche supprimée.

Écrivez ces deux codes.

Supprimez la tâche de ①. Mais cela ne peut rien faire sans serveur, j'utilise donc un serveur avec Ajax. Pour supprimer la tâche de ①, vous devez utiliser ❶ Ajax pour passer à l'action de suppression de la vue, et ❷ réécrire l'action de suppression pour Ajax.

❶ Comment ignorer le lien vers l'action de suppression avec Ajax

Code avant changement

ruby:app/views/tasks/index.html.slim


=link_to 'Supprimer', task, method: :delete, data:{confirm: "tâche"#{task.name}」をSupprimerします。よろしいですか?"},class: 'btn btn-danger'

Code après modification

ruby:app/views/tasks/index.html.slim


=link_to 'Supprimer', task, method: :delete, remote: true, data:{confirm: "tâche"#{task.name}」をSupprimerします。よろしいですか?"},class: 'btn btn-danger'

Pour utiliser la fonction Ajax, entrez simplement remote: true.

❷ Réécrire l'action de suppression pour Ajax

Code avant changement

app/controller/tasks_controller.rb


def destroy
  @task.destroy
  redirect_to tasks_url, notice: "tâche"#{@task.name}A été supprimée"
end

Code après modification

app/controller/tasks_controller.rb


def destroy
  @task.destroy
  head :no_content
end

Il est bon de remplacer la chose qui n'a pas besoin de passer par le serveur en faisant fonctionner le contrôleur avec Ajax. Cette fois, j'ai remplacé la méthode redirect_to. Puisque la méthode redirect_to passe par la route qui est reflétée au navigateur une fois via le serveur, elle est reflétée sans passer par Ajax. En écrivant head: no_content à la place, vous pouvez obtenir une réponse indiquant que la suppression est réussie sans passer par le serveur.

② Opération pour afficher l'écran de liste qui reflète la tâche supprimée.

Utilisez l'écran de liste à l'aide d'un gestionnaire d'événements. Qu'est-ce qu'un gestionnaire d'événements? Une position intermédiaire qui reçoit une opportunité et effectue un certain traitement.

Tout d'abord, ajoutez une classe de suppression pour faciliter la compréhension en regardant simplement le déclencheur qui est la cible du gestionnaire d'événements.

ruby:app/views/tasks/index.html.slim


=link_to 'Supprimer', task, method: :delete, remote: true, data:{confirm: "tâche"#{task.name}」をSupprimerします。よろしいですか?"},class: 'btn btn-danger delete'

Utilisez ensuite la classe delete pour écrire le gestionnaire d'événements et l'action à exécuter

app/assets/javascript/tasks.js


document.addEventListener('turbolinks:load', function(){
  document.querySelectorAll('.delete').forEach(function(a){
    a.addEventListener('ajax:success', function(){
      var td = a.parentNode;
      var tr = td.parentNode;
      tr.style.display = 'none';
    });
  });
});

8-2-3 Renvoyer le Javascript du contrôleur et l'exécuter

Dans ce qui précède, la tâche a été supprimée sur le serveur et la vue a été modifiée par Javascript dans le gestionnaire d'événements préparé. Cependant, il existe un autre modèle d'opérations qui produit le même résultat.

Comment transmettre les informations «Veuillez supprimer» du navigateur au serveur, et cette fois le serveur renvoie une réponse contenant du Javascript. Le serveur juge la tâche supprimée (appelée SJR) par l'élément id, et renvoie l'opération Javascript "Supprimer la tâche avec cet identifiant" au moment de la réponse.

Attachez d'abord un élément d'identifiant dédié au serveur pour déterminer quelle tâche a été supprimée

ruby:app/views/tasks/index.html.slim


table.table.table-default
...
tbody
  - @task.each do |task|
    tr id="task-#{task.id}"
      td= link_to task.name, task
      ...

J'ai créé un élément d'identification dédié appelé id = "task- # {task.id}".

Créez un fichier app / views / tasks / destroy.js.erb correspondant à l'action destroy et écrivez l'opération js souhaitée à partir du serveur.

ruby:app/views/tasks/destroy.js.erb


document.querySelector("#task-<%= @task.id%>").style.display = 'none'

Avec cela, le fonctionnement de js est accompagné de la réponse du serveur Enfin, supprimez le redirect_to de l'action de destruction

app/controller/tasks_controller.rb


def destroy
  @task.destroy
end

8-3 Turbolinks turbolinks: accélération en ajustant automatiquement les transitions de page pour tous les clics sur les liens

8-4-2-2 Exécution de la compilation

Compiler: les fichiers qui peuvent être exécutés par l'ordinateur sont verbalisés afin que l'ordinateur puisse les comprendre facilement. Il n'est pas compris par les humains. Mais le fichier doit être créé par des humains. À ce moment-là, tout d'abord, vous devez créer un fichier dans une langue que les humains peuvent comprendre et le changer automatiquement dans une langue facile à comprendre pour un ordinateur. Appelez cette opération compile

Recommended Posts

Rails Learning jour 3
Rails Learning jour 4
Rails Learning jour 2
rails d'apprentissage jour 1
Rails apprentissage 2ème jour 2
Rails Learning Jour 1 Partie 3
Rails Learning Jour 3 Partie 2
Rails Learning Jour 1 Partie 2
Programmation apprentissage jour 3
Jour d'apprentissage Java 5
java learning day 2
java learning day 1
Tutoriel Rails Chapitre 3 Apprentissage
[Rails] Didacticiel Apprendre avec les rails
Tutoriel Rails Chapitre 4 Apprentissage
Tutoriel Rails Chapitre 1 Apprentissage
Tutoriel Rails Chapitre 2 Apprentissage
Record d'apprentissage de Ruby on rails -2020.10.03
Record d'apprentissage Ruby on rails -2020.10.04
Record d'apprentissage de Ruby on rails -2020.10.05
Record d'apprentissage de Ruby on rails -2020.10.09
java learning day 4
Record d'apprentissage Ruby on rails-2020.10.07 ②
Record d'apprentissage Ruby on rails-2020.10.07 ①
Record d'apprentissage de Ruby on rails -2020.10.06
[Rails g. Erreur]
Tutoriel Rails 6e édition Résumé d'apprentissage Chapitre 10
Rails Tutorial 6e édition Résumé de l'apprentissage Chapitre 7
Notions de base sur les rails
Rails Examen 1
Ruby apprentissage 5
Tutoriel Rails 6e édition Résumé de l'apprentissage Chapitre 4
[Rails] first_or_initialize
Journée Java 2018
rails tutry
Tutoriel Rails 6e édition Résumé de l'apprentissage Chapitre 9
Tutoriel Rails 6e édition Résumé de l'apprentissage Chapitre 6
À propos des rails 6
Ruby apprentissage 3
Fondation Rails
Tutoriel Rails 6e édition Résumé de l'apprentissage Chapitre 5
tutoriel sur les rails
rails tutry
tutoriel sur les rails
Sortie d'apprentissage ~ 11/3 ~
Rails Tutorial 6e édition Résumé de l'apprentissage Chapitre 2
Tutoriel Rails Chapitre 0: Apprentissage préliminaire des connaissances de base 5
Ruby apprentissage 2
Apprentissage Maven
[Rails] concevoir
Ruby apprentissage 6
rails tutry
Tutoriel Rails 6e édition Résumé de l'apprentissage Chapitre 3
tutoriel sur les rails
Sortie d'apprentissage
Conseils de rails
méthode des rails
tutoriel sur les rails
Ruby apprentissage 1