Ruby on rails 讯息;“真的”;会话超时后在主页上闪烁

Ruby on rails 讯息;“真的”;会话超时后在主页上闪烁,ruby-on-rails,ruby-on-rails-4,devise,timeout,cancan,Ruby On Rails,Ruby On Rails 4,Devise,Timeout,Cancan,我有一个Rails4应用程序,当会话因不活动而超时时,我试图刷新一条自定义消息 我是通过在designe.rb中配置timeout\u来实现这一点的: Devise.setup do |config| ... config.timeout_in = 30.minutes ... end 并将自定义救援添加到我的应用程序控制器: rescue_from CanCan::AccessDenied do |exception| if user_signed_in? flash

我有一个Rails4应用程序,当会话因不活动而超时时,我试图刷新一条自定义消息

我是通过在
designe.rb
中配置
timeout\u来实现这一点的:

Devise.setup do |config|
  ...
  config.timeout_in = 30.minutes
  ...
end
并将自定义救援添加到我的应用程序控制器:

rescue_from CanCan::AccessDenied do |exception|
  if user_signed_in?
    flash.now.alert = exception.message
    render text: '', layout: true, status: 403
  else
    redirect_to new_user_session_path, notice: flash[:alert] || "You must login first"
  end
end
一切似乎都很好。。。当会话超时时,
flash[:alert]
已经有了正确的消息,因此我只使用该消息,当用户尝试访问资源而不首先登录时,将返回“您必须先登录”消息

这是main.html.haml页面中呈现这些警报的代码:

.container
  .main-content
    #flash
      - flash.each do |type, msg|
        %div{class: ('alert alert-dismissable fade in')}
          %button.close{data: {dismiss: :alert}} ×
          = msg
    = yield
问题是,我偶尔会看到一个flash,在会话超时消息的正下方显示文本“True”:


我不知道它是从哪里来的。似乎有什么东西正在创造一个具有这种价值的闪光信息。我想知道我做错了什么,或者是否有更好的方式显示会话超时消息。有什么想法吗?

试着输出每个flash的
类型
——可能是designe或其他什么东西在使用flash,而不仅仅是信息


我不会循环使用所有的闪存键来渲染它们——我只会显式地渲染那些专用于消息的键(通常是
:notice
:alert
)。

我知道这是一个迟到的回复,但我就是这么做的

flash.each do |type, message|
  unless type.to_s == 'timedout'
  <!-- Carry on printing messages -->
flash.each do |类型、消息|
除非type.to_s==“timedout”

关于它的价值,这里是它被修复的方式


谢谢亨里克。我不确定让
flash
控制应用程序状态的决定从一开始是否是一个好的设计决定,但这就是它的工作原理,我们对此无能为力。