【问题标题】:Devise errors are displayed twice设计错误显示两次
【发布时间】:2011-09-18 06:21:49
【问题描述】:

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

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

【问题讨论】:

    标签: ruby-on-rails devise


    【解决方案1】:

    我通过删除 index.html.erb 文件中的&lt;p id="notice"&gt;&lt;%= notice %&gt;&lt;/p&gt; 解决了这个问题

    【讨论】:

    • 这是为我做的。
    【解决方案2】:

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

    应该是这样的

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-03-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多