在表单中每个字段仅显示1个错误

时间:2016-07-02 18:25:18

标签: ruby-on-rails ruby-on-rails-4

我有一个模型,其中包含电子邮件作为其属性之一。它有以下验证:

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

当用户使用空的空电子邮件提交表单时,我收到以下2个错误:

  • 电子邮件不能为空
  • 电子邮件无效

如何在这种情况下仅显示与字段相关的第一条错误消息?

我正在通过执行以下操作检索与对象关联的错误消息:

@object.errors.full_messages

1 个答案:

答案 0 :(得分:3)

您可以通过以下方式轻松完成此操作:

<%= @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) 

这将为您提供单个字段的特定错误

编辑:

如果你有很多字段:

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