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

Sim*_*Sim 23 authentication devise ruby-on-rails-3

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

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

一些搜索建议继承会话控制器或使用类似的东西,但我无法找到任何简单的解决方案来解决这个问题.

Vol*_*ldy 32

您可以使用I18n后端自定义您的设计Flash消息,并设计支持.如果您没有为特定键设置任何内容,则不会显示空的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: ""
Run Code Online (Sandbox Code Playgroud)

UPD.

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

- unless notice.blank? && alert.blank?
  #flash
    .wrapper
      - unless notice.blank?
        %p.notice= notice
      - unless alert.blank?
        %p.alert= alert
Run Code Online (Sandbox Code Playgroud)


小智 8

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

.notice:empty {
  display: none;
}
Run Code Online (Sandbox Code Playgroud)

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