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