[RUBY] Anzeigen von Fehlermeldungen und Erfolgsmeldungen bei der Registrierung als Benutzer

Einführung

Ich habe einen Artikel erstellt, um mein Wissen darüber zu organisieren, wie Flash-Nachrichten bei der Anmeldung beim Erstellen eines Webdienstes mit Rails angezeigt werden. Grundlage ist das im Rails-Tutorial gewonnene Wissen.

Voraussetzungen

controller

python


def create
    @user = User.new(user_params) 
    if @user.save   #@Erfolg beim Speichern des Benutzers
      redirect_to @user  #Weiterleiten an Benutzerdetails
    else
      render 'new'  #Im Fehlerfall zur neuen Registrierung zurückkehren
    end
  end

  private

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

Fehlermeldung, wenn die neue Registrierung fehlschlägt

Wenn das Kennwort während der neuen Registrierung leer ist oder anderweitig überprüft wurde, kehrt der Bildschirm zum neuen Registrierungsbildschirm zurück und es wird eine Fehlermeldung angezeigt.

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 %>

Im obigen Code wird Render in die Methode form_for eingefügt und die Datei error_messages, die im freigegebenen Ordner gesammelt wird, wird abgerufen. Wenn Sie eine Fehlermeldung usw. einfügen, ändert das Schreiben des Codes in einer separaten Ansicht das Ergebnis nicht. In Rails ist es jedoch üblich, ein freigegebenes Verzeichnis für Partials zu erstellen, die von mehreren Ansichten verwendet werden, diese dort zu verwalten und bei Bedarf zu rendern. ___

Werfen wir einen Blick auf die Datei 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 %>

In diesem Code werden verschiedene Methoden verwendet. Schauen wir uns jeden an.

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

Diese Zeile verwendet die any? -Methode für @ user.errors. Die Methode ___any? Gibt beim Lesen true als logischen Wert zurück, wenn nur ein Ziel angegeben ist. ___ Daher habe ich gehört, dass der bedingte Ausdruck der if-Anweisung lautet: "Stimmt etwas mit @user nicht?" Und wenn etwas nicht stimmt, wird der darunter liegende Prozess aktiviert und in die Datei new.html.erb eingefügt.

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

Als nächstes kommt dieser Code. Dies ist der Code, der zählt und die Anzahl der Fehler anzeigt. Es gibt eine Methode namens Pluralisieren für Wörter, die hier schwer zu sehen scheint, aber überhaupt nicht schwierig ist. Dies ist eine Methode (nur Englisch) ___, die Singular- und Pluralformen getrennt nach der willkürlich gezählten Anzahl ausgibt. Zum Beispiel mit dem Hilfsobjekt

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

Wenn oben die für das Hilfsobjekt verwendete Methode ___pluralize einen ganzzahligen Wert als erstes Argument verwendet, wird das englische Wort als zweites Argument gemäß dem ganzzahligen Wert im Plural ausgegeben. ___ Das Tolle an dieser Methode ist, dass sie nicht nur zählbare Nomenklaturen, sondern auch unzählbare Nomenklaturen unterstützt, sodass Sie verhindern können, dass sie unnatürlich werden, wenn Sie etwas zählen und anzeigen möchten. Schauen wir uns diesen Code noch einmal an.

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

Das erste Argument der Pluralisierungsmethode ist @ user.errors.count. Hier zählt die Zählmethode die Anzahl der @ user.errors. Dann wird die durch das zweite Argument angegebene Einheit verwendet, um die Singular- oder Pluralform und -ausgabe zu bestimmen. Infolgedessen wird es als "Das Formular enthält 3 Fehler" geschrieben.

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

Dann wird der Inhalt des tatsächlich in dieser Anweisung auftretenden Fehlers angezeigt.

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

Der Teil `error.full_messages``` in dieser Anweisung überprüft das Objekt auf Fehler und druckt in diesem Fall anhand der ursprünglich von Rails bereitgestellten Fehlermeldungen aus, was falsch ist. Machen. (Es gibt auch eine Möglichkeit, auf Japanisch auszugeben, aber ich habe es nicht untersucht.) Fügen Sie dann die Ausgabefehlermeldung in einen Block namens msg ein und geben Sie sie mit <li> <% = msg%> </ li> `` aus.

Erfolgsmeldung bei erfolgreicher Neuregistrierung

Spielen Sie ein wenig mit dem Controller, um die Erfolgsmeldung anzuzeigen.

users_controller.rb


def create
    @user = User.new(user_params)
    if @user.save
      flash[:success] = "Welcome to the Sample App!" #Angeben einer Nachricht, wenn dies erfolgreich ist
      redirect_to @user
    else
      render 'new'
    end
  end

flash Zeigen Sie Erfolgsmeldungen erst unmittelbar nach der Umleitung auf die Seite an. Dazu verwenden wir eine spezielle Variable namens flash. Wenn in der obigen Steuerung der Schlüssel der Flash-Variablen Erfolg ist (was die Erfolgszeit gemäß der Rails-Konvention darstellt), wird "Willkommen in der Beispiel-App!" Als Wert zurückgegeben. Verwenden Sie dann die jeweilige Methode für die Flash-Variable in application.html.erb, um die Erfolgsmeldung anzuzeigen. Der hinzuzufügende Code lautet wie folgt

html:applocation.html.erb


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

Der obige Code ist etwas verwirrend und hat einen Umweg zum Schreiben, daher werde ich ihn später vereinfachen.

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

Zu diesem Zeitpunkt gibt es einen Schlüssel namens Erfolg und den Wert "Willkommen in der Beispiel-App!". In der Flash-Variablen nehmen Sie ihn mit jeder Methode heraus und fügen ihn in einen Block mit einem Schlüssel namens message_type und einen Block mit einem Wert namens message ein. Und es wird unten ausgegeben.

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

class="alert alert-<%= message_type %>"In Bootstrap wird eine Klasse verwendet, aber wenn Sie den Schlüssel hier eingebenclass="alert alert-success"Der nächste Bootstrap lässt dich cool aussehen.

Es wird immer noch normal angezeigt, ist aber schwer zu lesen. Verwenden Sie daher die content_tag-Methode, um eine Zeile daraus zu machen.

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>

Dieser ist leichter zu lesen!

Impressionen

Nachdem ich den grundlegenden Erfolg und das Hinzufügen von Fehlermeldungen verstanden habe, habe ich darüber nachgedacht, wie Fehlermeldungen ins Japanische übersetzt und Geräte verwendet werden können (ich persönlich halte dies für wichtiger). Ich würde gerne gut über w) verstehen.

Recommended Posts

Anzeigen von Fehlermeldungen und Erfolgsmeldungen bei der Registrierung als Benutzer
[Rails] So geben Sie Erfolgs- und Fehlermeldungen aus
Bei der Registrierung eines neuen Benutzers wurde ein Fehler namens ActiveRecord :: NotNullViolation und der Umgang damit angezeigt.
[Rails] So zeigen Sie Fehlermeldungen einzeln an
So zeigen Sie Fehlermeldungen auf Japanisch an
So lesen Sie eine Datei und behandeln sie als Standardeingabe
Ich möchte bei der Registrierung in der Datenbank eine Fehlermeldung anzeigen
[Rails] Wie schreibe ich, wenn ich eine Unterabfrage mache?
So zeigen Sie eine Webseite in Java an
[Ruby on Rails] Hinzufügen und Löschen von Tags und Anzeigen von (Erfolgs- / Fehler-) Meldungen mit Ajax.
Schreiben Sie beim Definieren einer Klasse sowohl formatTo als auch toString (Verwendung von Formattable).
Wie erstelle ich ein Vagrant Plugin, das Sie gelernt haben, als Sie Vagrant-Mutagen gegabelt und veröffentlicht haben?
[Arbeitsnotiz für persönliche Anwendungen] Anzeigen von Balkendiagrammen und Liniendiagrammen in einem Diagramm
[Docker] Wie man mit einem Container in Heroku aktualisiert und wie man mit Migrate Error umgeht
So führen Sie die SpringBoot-App als Dienst aus
So aktualisieren Sie Benutzerinformationen ohne Kennwort
So zeigen Sie eine Browser-Vorschau mit VS-Code an
So konvertieren Sie A in a und a in A mit logischem Produkt und Summe in Java
[Kotlin] So erhalten Sie die IP-Adresse und den Benutzeragenten
[RSpec] Testen von Fehlermeldungen, die unabhängig von Shoulda-Matchers festgelegt wurden
Testen des Einschlusses von Bildern bei Verwendung von ActiveStorage und Faker
So fordern Sie mit jMeter eine CSV-Datei als JSON an
Schreiben und Notizen bei der Migration von VB zu JAVA
So zeigen Sie Diagramme in Ruby on Rails an (LazyHighChart)
So entwickeln und registrieren Sie eine Sota-App in Java
So verbinden Sie eine Tabelle ohne DBFlute und SQL
So installieren Sie GNOME als Desktop-Umgebung unter CentOS 7
So führen Sie JUnit im Batch aus und erhalten Abdeckung
So erstellen und starten Sie eine Docker-Datei für Payara Micro
So registrieren Sie sich mit Tomcat als Kunde in Square
Wie hinterlasse ich einen Kommentar?
[Java] So zeigen Sie Wingdings an
So fügen Sie ein Video ein
So erstellen Sie eine Methode
[Swift] So zeigen Sie an, wann die Quiz-App richtig antwortet [Anfänger]
Ich erhalte einen Ruby-Versionsfehler, wenn ich versuche, Rails zu starten.
So laden Sie eine Spring-Upload-Datei und zeigen ihren Inhalt an
[jOOQ] Wie in der WHERE / AND / OR-Klausel WANN FALLEN
So geben Sie eine Liste von Zeichenfolgen in JSF als durch Kommas getrennte Zeichenfolgen aus
So beheben Sie den unbekannten Fehler, der bei der Verwendung von slf4j in Java aufgetreten ist
[Swift5] So kommunizieren Sie von ViewController zu Model und übergeben einen Wert
[Rails 5] Anzeigen des Bildschirms zum Ändern des Kennworts bei Verwendung von devise