在Rails 3中选择性地关闭Devise的flash通知

时间:2011-03-12 07:51:02

标签: ruby-on-rails-3 authentication devise

Devise身份验证框架在任何地方都使用闪存通知。这使得与应用程序集成变得容易,但有时会导致糟糕的用户体验。

我想知道在我的Rails 3应用程序中有选择地关闭一些Devise Flash通知的简单方法。特别是,我想摆脱明显明显的signed_in和signed_out闪烁。

有些搜索建议继承会话控制器或使用something like this,但我无法找到解决此问题的任何简单方法。

2 个答案:

答案 0 :(得分:32)

您可以使用I18n后端自定义您的设计Flash消息,并设计支持。如果您为特定键设置 nothing ,则不会显示空的Flash消息,例如sign_in和sign_out:

en:
  devise:
    failure:
      unauthenticated: 'You need to sign in or sign up before continuing.'
      unconfirmed: 'You have to confirm your account before continuing.'
      locked: 'Your account is locked.'
      invalid: 'Invalid email or password.'
      invalid_token: 'Invalid authentication token.'
      timeout: 'Your session expired, please sign in again to continue.'
      inactive: 'Your account was not activated yet.'
    sessions:
      signed_in: ""
      signed_out: ""

<强> UPD。

您不应该删除密钥,否则您将收到错误。 要不显示空的Flash消息,您应该在视图中进行简单的检查(例如,使用haml):

- unless notice.blank? && alert.blank?
  #flash
    .wrapper
      - unless notice.blank?
        %p.notice= notice
      - unless alert.blank?
        %p.alert= alert

答案 1 :(得分:8)

隐藏空Flash消息的更好方法:如果您的消息位于带有“通知”或“错误”类的div中,CSS3会让您拥有这样的样式:

.notice:empty {
  display: none;
}

这很好,因为你可以随时显示flash div,它只会出现在那里。我使用它来更新来自ajax调用的响应中的flash消息,否则不会更新flash消息,因为没有涉及页面重新加载。它给出了由于ajax调用而产生的消息的一致外观。