Aqui está outra maneira:
Se você usar este modelo:
<% if @thing.errors.any? %>
<ul>
<% @thing.errors.full_messages.each do |message| %>
<li><%= message %></li>
<% end %>
</ul>
<% end %>
Você pode escrever sua própria mensagem personalizada como esta:
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
Dessa forma, devido ao sublinhado, a mensagem completa se torna "Minha mensagem personalizada", mas o espaço extra no início é imperceptível. Se você realmente não quer esse espaço extra no começo, basta adicionar o .lstrip
método.
<% if @thing.errors.any? %>
<ul>
<% @thing.errors.full_messages.each do |message| %>
<li><%= message.lstrip %></li>
<% end %>
</ul>
<% end %>
O método String.lstrip se livra do espaço extra criado por ': _' e deixa inalteradas outras mensagens de erro.
Ou melhor ainda, use a primeira palavra da sua mensagem personalizada como chave:
def custom_validation_method_with_message
if some_model_attribute.blank?
errors.add(:my, "custom message")
end
end
Agora a mensagem completa será "Minha mensagem personalizada" sem espaço extra.
Se você deseja que a mensagem completa comece com uma palavra em maiúscula como "O URL não pode ficar em branco", isso não pode ser feito. Em vez disso, tente adicionar outra palavra como chave:
def custom_validation_method_with_message
if some_model_attribute.blank?
errors.add(:the, "URL can't be blank")
end
end
Agora a mensagem completa será "O URL não pode ficar em branco"