Ecco un altro modo:
Se usi questo modello:
<% if @thing.errors.any? %>
<ul>
<% @thing.errors.full_messages.each do |message| %>
<li><%= message %></li>
<% end %>
</ul>
<% end %>
Puoi scrivere il tuo messaggio personalizzato in questo modo:
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
In questo modo, a causa del carattere di sottolineatura, il messaggio completo diventa "Il mio messaggio personalizzato", ma lo spazio aggiuntivo all'inizio è impercettibile. Se non vuoi davvero quello spazio aggiuntivo all'inizio, aggiungi semplicemente il .lstrip
metodo.
<% if @thing.errors.any? %>
<ul>
<% @thing.errors.full_messages.each do |message| %>
<li><%= message.lstrip %></li>
<% end %>
</ul>
<% end %>
Il metodo String.lstrip eliminerà lo spazio aggiuntivo creato da ': _' e lascerà invariati tutti gli altri messaggi di errore.
O ancora meglio, usa la prima parola del tuo messaggio personalizzato come chiave:
def custom_validation_method_with_message
if some_model_attribute.blank?
errors.add(:my, "custom message")
end
end
Ora il messaggio completo sarà "Il mio messaggio personalizzato" senza spazio aggiuntivo.
Se vuoi che il messaggio completo inizi con una parola maiuscola come "L'URL non può essere vuoto" non può essere fatto. Prova invece ad aggiungere qualche altra parola come chiave:
def custom_validation_method_with_message
if some_model_attribute.blank?
errors.add(:the, "URL can't be blank")
end
end
Ora il messaggio completo sarà "L'URL non può essere vuoto"