设计登录/注册失败错误消息

时间:2014-03-04 10:42:54

标签: ruby-on-rails flash devise

我使用Foundation 5和Devise支持创建了一个简单的应用程序。 我注意到登录和注册失败的消息显示不同。 基金会5已生成以下部分用于显示Flash消息:

<% flash.each do |name, msg| %>
  <% if msg.is_a?(String) %>
   <div data-alert class="alert-box round <%= name == :notice ? "success" : "alert" %>">
    <%= content_tag :div, msg %>
    <a href="#" class="close">&times;</a>
   </div>
  <% end %>
<% end %>

我用谷歌搜索并阅读了很多帖子,但没有一个回答我的问题。

我有以下问题:

1)据我所知,登录失败消息会自动放入闪存哈希,而注册失败消息则不会。我是对的吗?

2)如果是这样,背后的理由是什么?我的意思是,为什么登录失败消息会自动添加到闪存但是注册和发送我重置密码不是?

3)我想将所有生成的Devise消息放入flash中,以便partial显示它。到目前为止,我提出的唯一方法是覆盖devise_error_messages!,扫描resource.errors.full_messages并将其置于闪存中。有谁知道更好的方法吗?

这就是我覆盖devise_error_messages!

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

    flash.now[:error] = resource.errors.full_messages.first

    return ""
  end
end

1 个答案:

答案 0 :(得分:0)

  

1)据我所知,登录失败消息会自动放入闪存哈希,而注册失败消息则不会。我是对的吗?

确实

  

2)如果是这样,背后的理由是什么?我的意思是,为什么登录失败消息会自动添加到闪存但是注册和发送我重置密码不是?

创建/更新用户模型(或用于Devise的模型)时,错误将显示为表单错误。登录/注销不会修改模型,因此会显示flash消息。

另外,(特别是对于Sign Up)显示一个大的无格式段落,顶部有几条错误消息(通常是flash消息所在的位置)与特殊的{{相比}似乎不是一个好主意1}}只是在具有属性和错误的表单顶部以漂亮的格式显示。

  

3)我想将所有生成的Devise消息放入flash中,以便partial显示它。到目前为止,我提出的唯一方法是覆盖devise_error_messages! ,扫描resource.errors.full_messages并将它们放入flash中。有没有人知道更好的方法呢?

如果您仍想使用Flash消息显示错误消息,则您显示的代码仅为您提供第一条错误消息,而不是全部。

尝试这样的事情:

<div>

甚至更好,因为从表单的视图调用flash.now[:error] = resource.errors.full_messages.join(" ")

  1. 删除视图上的调用(您可能需要从Devise生成视图)。
  2. 在Controller上使用devise_error_messages!