设计错误显示两次

时间:2011-06-19 18:46:49

标签: ruby-on-rails devise

使用Devise进行授权我将其配置为通过电子邮件或登录进行授权。 已删除Validatable驱动程序。我在我的用户模型中写了验证。 我还在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

在视图中(devise / registrations / new.html.erb)我替换

<%= devise_error_messages! %>

<% devise_error_messages! %>

所以,问题。 如果字段为空(或其他),则会显示闪存错误。然后我转到主页,错误再次显示。它只出现在注册界面中。当授权没事的时候。 请帮忙。

更新

部分视图(_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中!需要替换字符串:

flash[:alert] = errors

flash.now[:alert] = errors

希望它可以帮助任何人:)

2 个答案:

答案 0 :(得分:3)

您确定在应用中的其他任何位置都没有显示alert吗?

应该看起来像这样

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

答案 1 :(得分:1)

我通过删除index.html.erb文件中的<p id="notice"><%= notice %></p>来解决问题