[RUBY] Comment afficher les messages d'erreur et les messages de réussite lors de l'inscription en tant qu'utilisateur

introduction

J'ai créé un article pour organiser mes connaissances sur l'affichage des messages flash lors de l'inscription lors de la création d'un service Web avec Rails. La base est la connaissance acquise dans le didacticiel Rails.

Conditions préalables

controller

python


def create
    @user = User.new(user_params) 
    if @user.save   #@A réussi à enregistrer l'utilisateur
      redirect_to @user  #Rediriger vers les détails de l'utilisateur
    else
      render 'new'  #Retour à la nouvelle inscription en cas d'échec
    end
  end

  private

    def user_params
      params.require(:user).permit(:name, :email, :password,
                                   :password_confirmation)
    end

Message d'erreur lorsque la nouvelle inscription échoue

Si le mot de passe est vide ou validé lors du nouvel enregistrement, l'écran revient au nouvel écran d'enregistrement et un message d'erreur s'affiche.

html:new.html.erb


 <%= form_for(@user) do |f| %>
      <%= render 'shared/error_messages' %>

      <%= f.label :name %>
      <%= f.text_field :name, class: 'form-control' %>

      <%= f.label :email %>
      <%= f.email_field :email, class: 'form-control' %>

      <%= f.label :password %>
      <%= f.password_field :password, class: 'form-control' %>

      <%= f.label :password_confirmation, "Confirmation" %>
      <%= f.password_field :password_confirmation, class: 'form-control' %>

      <%= f.submit "Create my account", class: "btn btn-primary" %>
    <% end %>

Dans le code ci-dessus, le rendu est inséré dans la méthode form_for et le fichier error_messages qui est collecté dans le dossier partagé est importé. Lors de l'insertion d'un message d'erreur, etc., l'écriture du code dans une vue séparée ne change pas le résultat. Cependant, il est courant dans Rails de créer un répertoire partagé pour les partiels utilisés par plusieurs vues, de les gérer là-bas et de les rendre si nécessaire. ___

Jetons un œil au fichier error_messages.

html:_error_messages.html.erb


<% if @user.errors.any? %>
  <div id="error_explanation">
    <div class="alert alert-danger">
      The form contains <%= pluralize(@user.errors.count, "error") %>.
    </div>
    <ul>
    <% @user.errors.full_messages.each do |msg| %>
      <li><%= msg %></li>
    <% end %>
    </ul>
  </div>
<% end %>

Diverses méthodes sont utilisées dans ce code. Regardons chacun d'eux.

<% if @user.errors.any? %>

Cette ligne utilise la méthode any? Pour @ user.errors. La méthode ___any? Renvoie true comme valeur logique, au fur et à mesure de sa lecture, s'il n'y a même qu'une seule cible spécifiée. ___ Par conséquent, j'ai entendu dire que l'expression conditionnelle de l'instruction if dit "Y a-t-il un problème avec @user?" Et s'il y a quelque chose qui ne va pas, le processus ci-dessous sera activé et il sera inséré dans le nouveau.html.erb.

The form contains <%= pluralize(@user.errors.count, "error") %>.

Vient ensuite ce code. C'est le code qui compte et affiche le nombre d'erreurs. Il existe une méthode appelée pluraliser pour les mots qui semble difficile à voir ici, mais ce n'est pas du tout difficile. Il s'agit d'une méthode (en anglais uniquement) ___ qui produit les formes singulier et pluriel séparément en fonction du nombre compté arbitrairement. Par exemple, en utilisant l'objet d'assistance

>> helper.pluralize(1, "error")
=> "1 error"
>> helper.pluralize(5, "error")
=> "5 errors"

Dans ce qui précède, lorsque la méthode ___pluralize utilisée pour l'objet d'assistance prend une valeur entière comme premier argument, le mot anglais comme deuxième argument est sorti au pluriel en fonction de la valeur entière. ___ L'avantage de cette méthode est qu'elle prend en charge non seulement la nomenclature dénombrable mais également la nomenclature indénombrable, vous pouvez donc l'empêcher de devenir artificiel lorsque vous souhaitez compter et afficher quelque chose. Regardons à nouveau ce code.

The form contains <%= pluralize(@user.errors.count, "error") %>.

Le premier argument de la méthode pluralize est @ user.errors.count. Ici, la méthode count compte le nombre de @ user.errors. Ensuite, l'unité spécifiée par le deuxième argument est utilisée pour juger du singulier ou du pluriel et de la sortie. En conséquence, il sera écrit comme `` Le formulaire contient 3 erreurs ''.

<% @user.errors.full_messages.each do |msg| %>
      <li><%= msg %></li>
    <% end %>

Ensuite, le contenu de l'erreur se produisant réellement dans chaque instruction s'affiche.

<% @user.errors.full_messages.each do |msg| %>

La partie errors.full_messages de cette instruction vérifie si l'objet contient des erreurs, et si c'est le cas, affiche ce qui ne va pas en utilisant les messages d'erreur fournis à l'origine par Rails. Faire. (Il existe également un moyen de sortir en japonais, mais je ne l'ai pas étudié.) Ensuite, placez le message d'erreur de sortie dans un bloc appelé msg et affichez-le avec ``

  • <% = msg%> </ li> ''.

    Message de réussite lorsque la nouvelle inscription est réussie

    Jouez un peu avec le contrôleur pour afficher le message de réussite.

    users_controller.rb

    
    def create
        @user = User.new(user_params)
        if @user.save
          flash[:success] = "Welcome to the Sample App!" #Spécifier un message lorsqu'il réussit
          redirect_to @user
        else
          render 'new'
        end
      end
    

    flash Afficher uniquement les messages de réussite immédiatement après la redirection vers la page. Pour ce faire, nous utilisons une variable spéciale appelée flash. Et dans le contrôleur ci-dessus, lorsque la clé de la variable flash est réussie (représentant le temps de réussite par convention Rails), "Bienvenue dans l'exemple d'application!" Est défini pour être renvoyé en tant que valeur. Utilisez ensuite la méthode each sur la variable flash dans application.html.erb pour afficher le message de réussite. Le code à ajouter est le suivant

    html:applocation.html.erb

    
    <!DOCTYPE html>
    <html>
    .
    .
    .
    <% flash.each do |message_type, message| %>
      <div class="alert alert-<%= message_type %>"><%= message %></div>
    <% end %>
    .
    .
    .
    </body>
    </html>
    

    Le code ci-dessus est un peu déroutant et a une manière d'écrire détournée, donc je vais le simplifier plus tard.

    <% flash.each do |message_type, message| %>
    

    À ce stade, il existe une clé appelée succès et une valeur "Bienvenue dans l'exemple d'application!" Dans la variable flash, retirez-la avec la méthode each et placez-la dans un bloc avec une clé appelée message_type et un bloc avec une valeur appelée message. Et il sera affiché ci-dessous.

    <div class="alert alert-<%= message_type %>"><%= message %></div>
    

    class="alert alert-<%= message_type %>"Il y a une classe utilisée dans bootstrap, mais si vous mettez la clé iciclass="alert alert-success"Le prochain bootstrap vous fera paraître cool.

    Même ceci est affiché normalement, mais il est difficile à lire, utilisez donc la méthode content_tag pour créer une ligne.

    html:application.html.erb

    
    <!DOCTYPE html>
    <html>
    .
    .
    .
    <% flash.each do |message_type, message| %>
         <%= content_tag(:div, message, class: "alert alert-#{message_type}") %>
    <% end %>
    .
    .
    .
    </body>
    </html>
    

    Celui-ci est plus facile à lire!

    Impressions

    Maintenant que je comprends le succès de base et comment ajouter des messages d'erreur, j'ai réfléchi à la façon de traduire les messages d'erreur en japonais et à l'utilisation de la devise (je pense personnellement que c'est plus important). Je voudrais bien comprendre w).

    Recommended Posts

    Comment afficher les messages d'erreur et les messages de réussite lors de l'inscription en tant qu'utilisateur
    [Rails] Comment émettre des messages de réussite et d'erreur
    Lors de l'enregistrement d'un nouvel utilisateur, j'ai eu une erreur appelée ActiveRecord :: NotNullViolation et comment y faire face.
    [Rails] Comment afficher les messages d'erreur individuellement
    Comment afficher les messages d'erreur en japonais
    Comment lire un fichier et le traiter comme une entrée standard
    Je souhaite afficher un message d'erreur lors de l'inscription dans la base de données
    [Rails] Comment écrire lors de la création d'une sous-requête
    Comment afficher une page Web en Java
    [Ruby on Rails] Ajoutez et supprimez des balises et affichez les messages (succès / erreur) en utilisant ajax.
    Lors de la définition d'une classe, écrivez formatTo ainsi que toString (comment utiliser Formattable)
    Comment créer un plugin Vagrant que vous avez appris lorsque vous avez forké et publié vagrant-mutagen
    [Mémo de travail de l'application personnelle] Comment afficher un graphique à barres et un graphique linéaire dans un graphique
    [Docker] Comment mettre à jour à l'aide d'un conteneur dans Heroku et comment gérer l'erreur de migration
    Comment exécuter l'application SpringBoot en tant que service
    Comment mettre à jour les informations utilisateur sans mot de passe
    Comment afficher un aperçu du navigateur avec VS Code
    Comment convertir A en A et A en A en utilisant le produit logique et la somme en Java
    [Kotlin] Comment obtenir l'adresse IP et l'agent utilisateur
    [RSpec] Comment tester les messages d'erreur définis indépendamment par Shoulda-Matchers
    Comment tester avec des images lors de l'utilisation d'ActiveStorage et de Faker
    Comment demander un fichier CSV au format JSON avec jMeter
    Comment écrire et noter lors de la migration de VB vers JAVA
    Comment afficher des graphiques dans Ruby on Rails (LazyHighChart)
    Comment développer et enregistrer une application Sota en Java
    Comment joindre une table sans utiliser DBFlute et SQL
    Comment installer GNOME en tant qu'environnement de bureau sur CentOS 7
    Comment exécuter JUnit par lots et obtenir une couverture
    Comment créer et lancer un Dockerfile pour Payara Micro
    Comment s'inscrire en tant que client dans Square à l'aide de Tomcat
    Comment laisser un commentaire
    [Java] Comment afficher les Wingdings
    Comment insérer une vidéo
    Comment créer une méthode
    [Swift] Comment afficher lorsque l'application quiz répond correctement [Débutant]
    J'obtiens une erreur de version de Ruby lorsque j'essaye de démarrer Rails.
    Comment charger un fichier de téléchargement Spring et afficher son contenu
    [jOOQ] Comment utiliser CASE WHEN dans la clause WHERE / AND / OR
    Comment afficher une liste de chaînes dans JSF sous forme de chaînes séparées par des virgules
    Comment résoudre l'erreur inconnue apparue lors de l'utilisation de slf4j en Java
    [Swift5] Comment communiquer de ViewController à Model et transmettre une valeur
    [Rails 5] Comment afficher l'écran de changement de mot de passe lors de l'utilisation de l'appareil