Voici une autre façon:
Si vous utilisez ce modèle:
<% if @thing.errors.any? %>
<ul>
<% @thing.errors.full_messages.each do |message| %>
<li><%= message %></li>
<% end %>
</ul>
<% end %>
Vous pouvez écrire votre propre message personnalisé comme ceci:
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
De cette façon, en raison du trait de soulignement, le message complet devient "Mon message personnalisé", mais l'espace supplémentaire au début est imperceptible. Si vous ne voulez vraiment pas cet espace supplémentaire au début, ajoutez simplement la .lstrip
méthode.
<% if @thing.errors.any? %>
<ul>
<% @thing.errors.full_messages.each do |message| %>
<li><%= message.lstrip %></li>
<% end %>
</ul>
<% end %>
La méthode String.lstrip supprimera l'espace supplémentaire créé par ': _' et laissera les autres messages d'erreur inchangés.
Ou encore mieux, utilisez le premier mot de votre message personnalisé comme clé:
def custom_validation_method_with_message
if some_model_attribute.blank?
errors.add(:my, "custom message")
end
end
Maintenant, le message complet sera "Mon message personnalisé" sans espace supplémentaire.
Si vous voulez que le message complet commence par un mot en majuscule comme "URL ne peut pas être vide", cela ne peut pas être fait. Essayez plutôt d'ajouter un autre mot comme clé:
def custom_validation_method_with_message
if some_model_attribute.blank?
errors.add(:the, "URL can't be blank")
end
end
Maintenant, le message complet sera "L'URL ne peut pas être vide"