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.
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
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 ``
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!
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