Mit Rails versuche ich beim Speichern eine Fehlermeldung wie "Das Songfeld kann nicht leer sein" zu erhalten. Folgendes tun:
validates_presence_of :song_rep_xyz, :message => "can't be empty"
... zeigt nur "Song Rep XYW kann nicht leer sein" an, was nicht gut ist, da der Titel des Feldes nicht benutzerfreundlich ist. Wie kann ich den Titel des Feldes selbst ändern? Ich könnte den tatsächlichen Namen des Feldes in der Datenbank ändern, aber ich habe mehrere "Song" -Felder und ich muss bestimmte Feldnamen haben.
Ich möchte mich nicht um den Validierungsprozess von Rails kümmern, und ich bin der Meinung, dass es eine Möglichkeit geben sollte, dies zu beheben.
quelle
errors.add :base, msg
? Ich möchte wissen, um welche Spalte es sich bei dem Fehler handelt, damit ich sie im richtigen Formularfeld anzeigen kann.The password is wrong.
oderThe email address is not valid.
stattPassword is wrong.
undEmail is not valid.
.In Ihrem Modell:
Aus Ihrer Sicht
Wenn Sie stattdessen tun
Sie erhalten diese Fehlermeldung mit dem Attributnamen
Wenn Sie die Fehlermeldung für ein einzelnes Attribut erhalten möchten
quelle
validates_presence_of :address1, :message => :put_some_address_please
Versuche dies.
Ich habe das hier gefunden .
Hier ist eine andere Möglichkeit, dies zu tun. Sie definieren eine human_attribute_name-Methode für die Modellklasse. Die Methode erhält den Spaltennamen als Zeichenfolge und gibt die Zeichenfolge zurück, die in Validierungsnachrichten verwendet werden soll.
Der obige Code stammt von hier
quelle
Ja, es gibt eine Möglichkeit, dies ohne das Plugin zu tun! Aber es ist nicht so sauber und elegant wie mit dem genannten Plugin. Hier ist es.
Angenommen, es ist Rails 3 (ich weiß nicht, ob es in früheren Versionen anders ist),
Behalte dies in deinem Modell:
und in der Ansicht, anstatt zu gehen
wie es wäre, wenn wir den Gerüstgenerator verwenden, setzen Sie:
Und Sie erhalten nur die Nachricht, die Sie im Modell angegeben haben, ohne den Attributnamen.
Erläuterung:
Bisher wird nur eine Meldung angezeigt, immer für den ersten Fehler. Wenn Sie alle Fehler anzeigen möchten, können Sie den Hash durchlaufen und die Werte anzeigen.
Hoffe das hat geholfen.
quelle
Rails3-Code mit vollständig lokalisierten Nachrichten:
Definieren Sie im Modell user.rb die Validierung
In config / locales / en.yml
quelle
Verwenden Sie in der benutzerdefinierten Validierungsmethode:
errors.add(:base, "Custom error message")
da add_to_base veraltet ist.
errors.add_to_base("Custom error message")
quelle
Bezogen auf die akzeptierte Antwort und eine andere Antwort in der Liste :
Ich bestätige, dass Nanamkims Fork von custom-err-msg mit Rails 5 und mit dem Gebietsschema-Setup funktioniert.
Sie müssen die Gebietsschemanachricht nur mit einem Caret beginnen und es sollte nicht der Attributname in der Nachricht angezeigt werden.
Ein Modell definiert als:
mit folgendem
en.yml
:item.errors.full_messages
wird angezeigt:statt des üblichen
Name You can't create an item without a name
quelle
Ich empfehle die Installation des Gems custom_error_message (oder als Plugin ), das ursprünglich von David Easley geschrieben wurde
Damit können Sie Dinge tun wie:
quelle
gem "custom_error_message"
Fügen Sie es einfach zu Ihrem Gemfile hinzu - siehe Github für weitere DetailsEine Lösung könnte darin bestehen, das Standardfehlerformat von i18n zu ändern:
Standard ist
format: %{attribute} %{message}
quelle
Hier ist ein anderer Weg:
Wenn Sie diese Vorlage verwenden:
Sie können Ihre eigene benutzerdefinierte Nachricht wie folgt schreiben:
Auf diese Weise wird die vollständige Nachricht aufgrund des Unterstrichs zu "Meine benutzerdefinierte Nachricht", aber der zusätzliche Platz am Anfang ist nicht wahrnehmbar. Wenn Sie diesen zusätzlichen Platz am Anfang wirklich nicht möchten, fügen Sie einfach die
.lstrip
Methode hinzu.Die String.lstrip-Methode entfernt den zusätzlichen Speicherplatz, der durch ': _' erstellt wurde, und lässt alle anderen Fehlermeldungen unverändert.
Oder noch besser, verwenden Sie das erste Wort Ihrer benutzerdefinierten Nachricht als Schlüssel:
Jetzt lautet die vollständige Nachricht "Meine benutzerdefinierte Nachricht" ohne zusätzlichen Speicherplatz.
Wenn Sie möchten, dass die vollständige Nachricht mit einem Großbuchstaben wie "URL darf nicht leer sein" beginnt, ist dies nicht möglich. Versuchen Sie stattdessen, ein anderes Wort als Schlüssel hinzuzufügen:
Jetzt lautet die vollständige Nachricht "Die URL darf nicht leer sein".
quelle
errors.add(:_, 'foobar')
'foobar' als Nachricht bekommenMach es einfach wie gewohnt:
Aber zeigen Sie es stattdessen so an
Kehrt zurück
Die Lokalisierungsmethode ist definitiv der "richtige" Weg, dies zu tun. Wenn Sie jedoch ein kleines, nicht globales Projekt durchführen und einfach nur schnell loslegen möchten, ist dies definitiv einfacher als das Hüpfen von Dateien.
Ich mag es für die Möglichkeit, den Feldnamen an einer anderen Stelle als am Anfang der Zeichenfolge zu platzieren:
quelle
Wenn Sie sie alle in einer schönen Liste auflisten möchten, ohne jedoch den groben, nicht menschlich freundlichen Namen zu verwenden, können Sie dies tun ...
quelle
Aus Ihrer Sicht
Wenn Sie die Fehlermeldung ohne den Attributnamen überschreiben möchten, stellen Sie der Nachricht einfach Folgendes vor:
quelle
Ich habe versucht zu folgen, habe für mich gearbeitet :)
1 job.rb
2 jobs_controller.rb
3 _form.html.erb
quelle
Hier ist mein Code, der für Sie nützlich sein kann, falls Sie ihn noch benötigen: Mein Modell:
Dann habe ich einen Helfer erstellt, um Nachrichten anzuzeigen:
quelle
Die einzige Möglichkeit, alle gewünschten Anpassungen zu erhalten, bestand darin, einen
after_validation
Rückruf zu verwenden, um die Fehlermeldung zu bearbeiten.Wenn die Validierungsnachricht wie gewohnt erstellt werden soll, müssen Sie nicht versuchen, sie im Validierungshelfer zu ändern.
Erstellen Sie einen
after_validation
Rückruf, der diese Validierungsnachricht im Back-End ersetzt, bevor sie zur Ansicht gelangt.In der
after_validation
Methode können Sie mit der Validierungsnachricht alles tun, was Sie wollen, genau wie mit einer normalen Zeichenfolge! Sie können sogar dynamische Werte verwenden und diese in die Validierungsnachricht einfügen.Die after_validation-Methode hat einen weitaus größeren Umfang als der integrierte Rails-Validierungshelfer, sodass Sie auf das zu validierende Objekt zugreifen können, wie Sie es mit object.file_name versuchen. Was im Validierungs-Helfer, in dem Sie ihn aufrufen möchten, nicht funktioniert.
Hinweis: Wir verwenden das
^
, um den Attributnamen zu Beginn der Validierung zu entfernen, da @Rystraum darauf hingewiesen hat, dass auf dieses Juwel verwiesen wirdquelle
Die Antwort von greywh ist die beste, wenn der Feldname tatsächlich anders angezeigt wird. Im Fall eines dynamischen Feldnamens (basierend auf anderen anzuzeigenden Feldern) würde ich so etwas tun
Die Methode full_message auf der anderen Seite wird von Rails innerhalb der Methode full_messages verwendet, sodass die normalen Rails-Fehler für andere Fälle ausgegeben werden (Rails 3.2 und höher).
quelle