设计错误显示两次 [英] Devise errors are displayed twice

查看:54
本文介绍了设计错误显示两次的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

使用Devise进行授权我将其配置为通过电子邮件或登录进行授权。
有效驱动程序已删除。我在用户模型中编写了验证。
我也覆盖了app / helpers / devise_helper.rb中的devise助手:

Using Devise for authorization I configured it to authorize by email or login. Validatable driver deleted. I wrote validates in my user model. Also I overwrite devise helper in app/helpers/devise_helper.rb:

module DeviseHelper
  def devise_error_messages!
    return "" if resource.errors.empty?

    errors = Array.new

    resource.errors.each do |field, msg|
      errors.push(msg)
    end
    flash[:alert] = errors
  end
end

在视图(设计/注册/new.html.erb)中,我替换了

In view (devise/registrations/new.html.erb) I replace

<%= devise_error_messages! %>

<% devise_error_messages! %>

所以,问题。
如果字段为空(或其他),则显示闪存错误。然后我转到主页,并且再次显示错误。它仅出现在注册界面中。授权的时候就可以了。
请帮助。

So, problem. When fields are empty (or else), flash errors are showing. Then I go to main page, and errors show again. It's appear only in registration interface. When authorization thats all right. Please help.

已更新。

局部视图(_block_errors .html.erb):

partial view (_block_errors.html.erb):

<% flash.each do |name, msg| %>
  <% if msg.class == Array %>
    <% msg.each do |message| %>
      <%= content_tag :p, message, :class => "#{name}" %>
    <% end %>
  <% else %>
    <%= content_tag :p, msg, :class => "#{name}" %>
  <% end %>
<% end %>

在布局中,它被称为:

<%= render 'layouts/block_errors' %>

已解决!

在重载方法devise_error_messages中!需要替换字符串:

In overloaded method devise_error_messages! need to replace string:

flash[:alert] = errors

flash.now[:alert] = errors

希望对所有人都有帮助:)

Hope it helps anybody :)

推荐答案

您确定没有在应用程序的其他任何地方显示警报吗?

Are you sure you don't have alert displayed anywhere else in your app?

应该看起来像这样

<% if flash[:alert] %>
  <p id="notice"><%= flash[:alert] %></p>
<% end %>

这篇关于设计错误显示两次的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆