Вот еще один способ:
Если вы используете этот шаблон:
<% if @thing.errors.any? %>
<ul>
<% @thing.errors.full_messages.each do |message| %>
<li><%= message %></li>
<% end %>
</ul>
<% end %>
Вы можете написать собственное сообщение, например:
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
Таким образом, из-за подчеркивания, полное сообщение становится «Мое пользовательское сообщение», но лишний пробел в начале незаметен. Если вам действительно не нужно лишнее пространство в начале, просто добавьте .lstrip
метод.
<% if @thing.errors.any? %>
<ul>
<% @thing.errors.full_messages.each do |message| %>
<li><%= message.lstrip %></li>
<% end %>
</ul>
<% end %>
Метод String.lstrip избавит от лишнего пространства, созданного ': _', и оставит все остальные сообщения об ошибках без изменений.
Или, что еще лучше, используйте первое слово вашего пользовательского сообщения в качестве ключа:
def custom_validation_method_with_message
if some_model_attribute.blank?
errors.add(:my, "custom message")
end
end
Теперь полное сообщение будет «Мое личное сообщение» без лишних пробелов.
Если вы хотите, чтобы полное сообщение начиналось со слова с заглавной буквы, например «URL не может быть пустым», это невозможно сделать. Вместо этого попробуйте добавить другое слово в качестве ключа:
def custom_validation_method_with_message
if some_model_attribute.blank?
errors.add(:the, "URL can't be blank")
end
end
Теперь полное сообщение будет «URL не может быть пустым»