【问题标题】:How to show devise error messages one by one如何一一显示设计错误消息
【发布时间】:2019-04-04 22:18:34
【问题描述】:

我正在编写一个应用程序,并且我正在将设计用于注册和登录目的。

我现在正在验证注册表单字段,我可以使用“”检查并显示“未验证”数据。

问题是我不想在同一个 div 中显示所有错误,我想将错误 1 ​​放在一个 div 中,将错误 2 放在另一个 div 中,依此类推。

例如:如果用户插入已使用的用户名并将电子邮件字段留空,我想显示:

  1. “用户名已被占用”靠近用户名字段
  2. 靠近电子邮件字段的“电子邮件不能为空”

谢谢

【问题讨论】:

  • devise_error_messages! 只是一个辅助方法。您可以自己覆盖它或在字段旁边一一显示错误消息。
  • 谢谢,但是我怎样才能一一显示消息呢?

标签: ruby-on-rails ruby validation error-handling devise


【解决方案1】:

您始终可以遍历资源中的错误。

所以如果你看起来类似这样:

<%= form_for(resource, :as => resource_name, :url => registration_path(...

您可以简单地获取资源中的错误并显示它们,如下所示:

<% resource.errors.full_messages.each do |msg| %>
  <div><%= msg %></div>
<% end %>

errors.full_messages - 将为您提供一个包含漂亮错误消息的数组,您可以向用户显示这些消息。

【讨论】:

  • 谢谢,我这样做了,但结果是一样的。我将所有错误消息都放在同一个地方。我希望在用户名字段下方显示用户名错误,在密码字段下方显示密码错误等等..
  • errors 对象是一个哈希,您可以根据字段名称轻松选择要显示的错误:
【解决方案2】:

我用这个解决了它创建一个初始化程序

ActionView::Base.field_error_proc = Proc.new do |html_tag, instance|   unless html_tag 
=~ /^<label/
    %{<div class="field_with_errors">#{html_tag}<label for="#{instance.send(:tag_id)}" 
class="message">#{instance.error_message.first}</label></div>}.html_safe else
    %{<div class="field_with_errors">#{html_tag}</div>}.html_safe   end end

这给了我想要的确切结果。

Result

感谢您的帮助! :)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-01-29
    • 1970-01-01
    • 2012-06-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多