Hier ist ein anderer Weg:
Wenn Sie diese Vorlage verwenden:
<% if @thing.errors.any? %>
<ul>
<% @thing.errors.full_messages.each do |message| %>
<li><%= message %></li>
<% end %>
</ul>
<% end %>
Sie können Ihre eigene benutzerdefinierte Nachricht wie folgt schreiben:
class Thing < ActiveRecord::Base
validate :custom_validation_method_with_message
def custom_validation_method_with_message
if some_model_attribute.blank?
errors.add(:_, "My custom message")
end
end
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.
<% if @thing.errors.any? %>
<ul>
<% @thing.errors.full_messages.each do |message| %>
<li><%= message.lstrip %></li>
<% end %>
</ul>
<% end %>
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:
def custom_validation_method_with_message
if some_model_attribute.blank?
errors.add(:my, "custom message")
end
end
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:
def custom_validation_method_with_message
if some_model_attribute.blank?
errors.add(:the, "URL can't be blank")
end
end
Jetzt lautet die vollständige Nachricht "Die URL darf nicht leer sein".