Ich wollte benutzerdefinierte Fehlermeldungen für meine Feldnamen haben. Ich stolperte über eine weitere SO Frage
Also habe ich etwas wie folgt hinzugefügt:
%Vor% Aber ich möchte auch die Numerizität von prod_price überprüfen. Wenn ich nur hinzufüge
validate_numericality_of :prod_price
und Produktpreis ist leer, dann erscheinen beide Fehlermeldungen (leer und ist keine Nummer).
Wie kann ich nur die Fehlermeldung "Ist keine Nummer?" nur anzeigen, wenn der Produktpreis NICHT leer ist?
Ich habe es versucht
%Vor%Auch, wie kann ich eine benutzerdefinierte Nachricht für "ist keine Nummer" haben. Ich möchte den Namen meiner Spalte dem Benutzer anzeigen.
Sie können benutzerdefinierte Nachrichten haben, ohne Ihre eigene Validierungsmethode zu schreiben. Fügen Sie einfach :message
:
validates_presence_of :prod_price, :message => "Product price can't be blank"
Wenn Sie die numerische Validierung überspringen möchten, wenn prod_price
nicht vorhanden ist, fügen Sie hinzu: allow_nil:
validates_presence_of :prod_price, :message => "Product price can't be blank"
validates_numericality_of :prod_price, :allow_nil => true
Dann wird die numerische Überprüfung nicht ausgeführt, wenn prod_price
fehlt.
BEARBEITEN:
Warte, du willst nicht, dass der Feldname in der Fehlermeldung erscheint? Das habe ich vermisst. Sie benötigen also die benutzerdefinierte Validierung.
EDIT # 2:
Ok, wie wäre es dann:
%Vor%Die derzeit akzeptierte Antwort funktioniert, aber hier ist ein datengesteuerter Weg, dies mit Rails 'i18n zu tun:
Das Hinzufügen von allow_blank: true
zu validates_numericality_of
kümmert sich um das leere Problem.
Dann können Sie i18n verwenden, um Attributnamen automatisch für Sie zu übersetzen (docs hier ).
Für prod_price
fügen Sie einfach en.yml
hinzu:
Nun, da ein Teil der Nummer sein muss, können wir i18n erneut verwenden. Von den Dokumenten :
Active Record Validierung Fehlermeldungen können auch leicht übersetzt werden. Active Record bietet Ihnen eine Reihe von Namespaces, in denen Sie Ihre Nachrichtenübersetzungen platzieren können, um verschiedene Nachrichten und Übersetzungen für bestimmte Modelle, Attribute und / oder Validierungen bereitzustellen.
Es gibt eine handliche Tabelle dieser Namespaces hier , wo Sie sehen können, dass message für eine numericity Validierung ist not_a_number
.
Jetzt können wir das zu en.yml
so hinzufügen:
Jetzt, wenn die Validierung fehlschlägt, wird sie verkettet, um Ihnen zu geben: Der Produktpreis muss eine Zahl sein .
Aus vielen Gründen sollten Sie, wenn Sie nichts Ungewöhnliches tun müssen, Fehlermeldungen an bestimmte Felder anhängen (es ist einfacher, Komponententests durchzuführen, Fehler später leichter zu modifizieren, wenn Sie Marker neben ungültigen Feldern anzeigen) wollen, usw.). Ich denke, was Sie tun wollen, kann damit erreicht werden:
%Vor%Ich habe diesen Ansatz von der anderen Frage SO
genommen %Vor%Auf diese Weise muss ich keine benutzerdefinierte Nachricht für jedes Feld schreiben. Ich ändere einfach den Namen der Datei, die dem Benutzer angezeigt wird
Tags und Links ruby-on-rails validation