Aquí hay otra manera:
Si usa esta plantilla:
<% if @thing.errors.any? %>
<ul>
<% @thing.errors.full_messages.each do |message| %>
<li><%= message %></li>
<% end %>
</ul>
<% end %>
Puede escribir su propio mensaje personalizado como este:
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 esta manera, debido al guión bajo, el mensaje completo se convierte en "Mi mensaje personalizado", pero el espacio extra al principio es imperceptible. Si realmente no quieres ese espacio extra al principio, solo agrega el .lstrip
método.
<% if @thing.errors.any? %>
<ul>
<% @thing.errors.full_messages.each do |message| %>
<li><%= message.lstrip %></li>
<% end %>
</ul>
<% end %>
El método String.lstrip eliminará el espacio adicional creado por ': _' y dejará los demás mensajes de error sin cambios.
O incluso mejor, use la primera palabra de su mensaje personalizado como clave:
def custom_validation_method_with_message
if some_model_attribute.blank?
errors.add(:my, "custom message")
end
end
Ahora el mensaje completo será "Mi mensaje personalizado" sin espacio adicional.
Si desea que el mensaje completo comience con una palabra en mayúscula como "La URL no puede estar en blanco", no puede hacerlo. En su lugar, intente agregar alguna otra palabra como clave:
def custom_validation_method_with_message
if some_model_attribute.blank?
errors.add(:the, "URL can't be blank")
end
end
Ahora el mensaje completo será "La URL no puede estar en blanco"