2016-07-02 1 views
0

У меня есть модель с электронной почтой как один из ее атрибутов. Она имеет следующие проверки:Отображение только одной ошибки в поле в форме

validates :email, presence: true, length: { maximum: 50 }, format: { with: VALID_EMAIL_REGEX } 

Когда пользователь отправляет форму с пустым пустым адресом электронной почты, я получаю следующие 2 ошибки:

  • Email не может быть пустой
  • Email недействителен

Как я могу отобразить только первое сообщение об ошибке, связанное с полем в таком сценарии?

Я получение сообщений об ошибках, связанные с объектом, выполнив:

@object.errors.full_messages 

ответ

2

Вы можете сделать это очень легко с этой линией:

<%= @object.errors.full_messages.first if @object.errors.any? %> 

Просто замените экземпляр объекта. Если вы хотите использовать только с одним полем, то есть этот метод

http://api.rubyonrails.org/classes/ActiveModel/Errors.html#method-i-full_messages_for:

object.errors.full_messages_for(:email) 

Это поможет вам конкретную ошибку для одного поля

EDIT:

, если у вас есть много полей:

<% @object.errors.each do |attr, msg| %> 
    <%= "#{attr} #{msg}" if @object.errors[attr].first == msg %> 
<% end %> 
+0

Спасибо, возможно ли это сделать в более масштабируемом виде так? Например, если моя форма имеет 10 полей, я не хочу индивидуально извлекать первую ошибку, связанную с каждым полем. – user1175969

+1

Я отредактировал вопрос - вы можете настроить вывод, если нужно, внутри "" –

Смежные вопросы