2010-06-01 17 views
7

ich eine einfache aktive Datensatz Validierung auf einem Objekt habe dies in einem Formular:Entfernen Feldnamen aus der Objektvalidierungsnachricht

form.error_messages({:message => '', :header_message => ''}) 

Dies wiederum gibt so etwas wie „Field My Custom Nachricht“

Was ich tun muss, ist den Feldnamen aus der Fehlermeldung entfernen, aber meine benutzerdefinierte Nachricht hinterlassen.

Kann mir jemand in die richtige Richtung dafür zeigen.

Antwort

9

Eine Möglichkeit, die vollständige Kontrolle über die Nachrichten haben, ist eine benutzerdefinierte validate Block im Modell zu verwenden. z.B. um zu überprüfen, dass ein Feld nicht leer ist, würde es so aussehen:

class MyModel < ActiveRecord::Base 
    validate do |model| 
    model.errors.add_to_base("My Custom message") if user.field.blank? 
    end 
end 

add_to_base soll für das Hinzufügen von Nachrichten, die nicht an einen bestimmten einzelnen Feld verbunden sind (zum Beispiel, wenn eine Kombination aus mehreren Feldern illegal ist). Dies bedeutet, dass das CSS zum Hervorheben Ihres ungültigen Felds nicht hinzugefügt wird. Sie können in der Umgebung arbeiten, indem Sie den Fehlern für Ihr Feld auch eine Nullnachricht hinzufügen, z.

model.errors.add(:field, nil) 

Alternativ Besuche custom-err-message Plugin - dieses Plugin haben Sie die Möglichkeit nicht Ihre benutzerdefinierten Validierung Fehlermeldung mit dem Attributnamen vorangestellt haben.

Update:

add_to_base ist seit Rails veraltet 3. Folgende kann stattdessen verwendet werden: model_instance.errors.add(:base, "Msg")
Ref: https://apidock.com/rails/ActiveRecord/Errors/add_to_base

+0

Prost mikej, das custom-err-message plugin hat genau das gemacht, was ich wollte – pythonandchips

+0

Es gibt auch ein [Juwel] (https://github.com/thethanghn/custom-err-msg), das für mich in Rails 4 funktioniert hat – dusan

0

Sie die errors Instanz des Objekts zugreifen kann direkt, wenn Sie benötigen die volle Kontrolle darüber, wie die Nachrichten präsentiert werden.

7

In Schienen 3.2.6 können Sie diese Einstellung in einer locale-Datei (zB config/locales/en.yml):

en: 
    errors: 
    format: "%{message}" 

Ansonsten ist das Standardformat „% {attribute}% { Botschaft}".

+1

Dies funktioniert auch in 4.0.2. – Deborah

+0

Arbeitet noch am 4.1.1 –