[RUBY] La fonction de déconnexion qui a été implémentée depuis le début lorsque webpacker a été introduit dans la série Rails 5.2 a cessé de fonctionner car aucune route ne correspond à l'erreur [get] "/ logout".

introduction

Dès que j'ai introduit webpacker dans Rails 5.2 lors de la création d'une application de publication, la fonction de déconnexion initialement implémentée a cessé de fonctionner. no route matches [get] "/logout"J'ai eu une erreur et je n'ai pas pu envoyer la demande de suppression, je vais donc la corriger.

environnement

Ruby 2.6.5 Rails 5.2.4.2 webpacker 5.1.1

Point d'occurrence d'erreur

A partir du moment où vous chargez la balise de script webpacker dans application.html.slim après avoir construit le webpacker.

ruby:app/views/layouts/application.html.slim


head
    .
    .
    .
    - = javascript_include_tag 'application','data-turbolinks-track': 'reload'
    + = javascript_pack_tag 'application'
    .
    .
    .

Solution

  1. Tout d'abord, ajoutez rails-ujs``` au fichier du paquet de fils. Et assurez-vous que cela est ajouté à package.json.
$ yarn add rails-ujs

package.json


{
  "name": ,
  "dependencies": {
    "@rails/webpacker": "5.1.1", 
    "rails-ujs": "^5.2.4-3",
  },
}

2.app/javascript/packsディレクトリ配下にrails-ujs.jsファイルを作成し、下記の記述を追加します。

app/javascript/packs/rails-ujs.js


import Rails from 'rails-ujs';
Rails.start();

3.app/javascript/packs/application.jsファイルに、rails-ujs.jsファイルを読み込ませます。

app/javascript/packs/application.js


require("./rails-ujs.js");

4.app/views/layouts/application.html.slimファイルに、webpackerスクリプトを記述します。

ruby:app/views/layouts/application.html.slim


head
    .
    .
    .
    = javascript_pack_tag 'application'
    .
    .
    .

Avec ce qui précède, je pense que vous recevrez une demande DELETE.

Pourquoi ça marche

À la suite de diverses enquêtes, je ne peux pas faire de déclaration définitive parce que je viens de combiner Tsuji, mais j'ai fait une prédiction que ce serait comme ça.

Si vous faites une erreur, je vous serais très reconnaissant de bien vouloir la signaler!

Tout d'abord, par principe, dans l'état par défaut, HTML ne peut envoyer que des requêtes GET, POST (vous pouvez donc vous connecter comme d'habitude)

Cependant, lors de l'émission d'API RESTful telles que DELETE et PATCH dans Rails, gem rails-ujs '' ou gem jquery-rails '' est utilisé car le traitement est laissé à JavaScript. ..

Dans Rails 5.1 ou version ultérieure, ce rails-ujs est chargé par défaut dans le fichier de contrôle JavaScript '' `` (voir le fichier ci-dessous).

Donc, nous n'avons pas à nous en soucier, écrivez simplement une option telle que method :: delete du côté Rails, et JavaScript gérera le reste, vous pouvez donc envoyer une requête DELETE depuis HTML. Je suis.

À propos, la prise en charge de jquery-ujs a été interrompue depuis Rails 5.1 (à partir du Guide Rails.)

app/assets/javascript/application.js


//= require rails-ujs
//= require activestorage
//= require turbolinks
//= require_tree .

Cependant, si vous installez webpacker, rails-ujs n'est pas installé en premier lieu dans l'état par défaut, vous ne pouvez donc pas recevoir de support.

J'ai donc pensé qu'il était naturel que le traitement de l'API RESTful ne puisse pas être utilisé à moins que rails-ujs ne soient installés et rails-ujs ne soient nouvellement chargés dans le fichier packs / application.js.

référence

http://docs.komagata.org/5456  https://www.inodev.jp/entry/2019/12/03/234210

Recommended Posts

La fonction de déconnexion qui a été implémentée depuis le début lorsque webpacker a été introduit dans la série Rails 5.2 a cessé de fonctionner car aucune route ne correspond à l'erreur [get] "/ logout".
La fonction de déconnexion qui a été implémentée depuis le début lorsque webpacker a été introduit dans la série Rails 5.2 a cessé de fonctionner car aucune route ne correspond à l'erreur [get] "/ logout".