【问题标题】:Displaying only 1 error per field in a form表单中每个字段仅显示 1 个错误
【发布时间】:2016-07-02 18:25:18
【问题描述】:

我有一个将电子邮件作为其属性之一的模型。它具有以下验证:

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

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

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

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

我正在通过以下方式检索与对象关联的错误消息:

@object.errors.full_messages

【问题讨论】:

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


    【解决方案1】:

    你可以用这条线很容易地做到这一点:

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

    【讨论】:

    • 谢谢,是否有可能以更具可扩展性的方式做到这一点?例如,如果我的表单有 10 个字段,我不想单独提取与每个字段关联的第一个错误。
    • 我编辑了问题 - 如果需要,您可以在 "" 中自定义输出
    猜你喜欢
    • 1970-01-01
    • 2011-11-09
    • 2012-06-29
    • 1970-01-01
    • 1970-01-01
    • 2013-06-19
    • 2011-02-03
    • 1970-01-01
    • 2016-12-02
    相关资源
    最近更新 更多