首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >为什么flash消息不会消失?

为什么flash消息不会消失?
EN

Stack Overflow用户
提问于 2011-01-06 18:31:34
回答 6查看 42.2K关注 0票数 79

我正在我的控制器中做一些异常处理,当有一个异常抛入:create action时,我将呈现给:new action并显示一条flash消息。

一切正常,当异常捕获时,我可以看到闪光信息,但当我重定向到(简单地点击)其他页面时,闪光信息。然后我重定向到另一个页面(第二次点击),消息可能会消失。

谁知道原因是什么?

我的控制器代码:

代码语言:javascript
复制
class MessagesController < ApplicationController
  rescue_from Exception, :with => :render_new

  def new
  end

  def create
  end

private
  def render_new
    flash[:alert] = t("uploading_error")
    render :action => :new
  end
end

我的布局代码(Haml):

代码语言:javascript
复制
%body
  #content
    - unless flash[:alert].blank?
      #alert= flash[:alert]
EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2011-01-06 18:39:28

替换

代码语言:javascript
复制
flash[:alert] = t("uploading_error")

使用

代码语言:javascript
复制
flash.now.alert = t("uploading_error")

看看这是不是你想要的结果?

flash[:alert]将停留在下一页(因此它只在第二次重定向时消失);但是flash.now.alert将只显示当前页面。

票数 166
EN

Stack Overflow用户

发布于 2011-01-06 19:45:02

在flash.now和普通flash之间做出选择是一件很痛苦的事情,在我的经验中也是相当脆弱的。我使用常规闪存,然后修改我的局部闪存,它显示闪存,以便在用户看到每个闪存后删除它的内容。我觉得这样更好,因为

a)你不需要考虑它

b)“用户看到了吗?”(即“闪光是否部分渲染出来了?”)是决定是否清除闪存的最佳标准,而不是应用程序中的任何逻辑。

我的flash partial看起来像这样-我也使用了一些jquery来突出显示flash (也就是让它们闪烁一秒钟):

代码语言:javascript
复制
<div id="flashes">

  <% if flash[:notice] %>
    <p id="flash_notice" class="messages notice"><%= flash[:notice] %></p>
    <%= javascript_tag "$('#flash_notice').effect('highlight',{},1000);" %>
  <% end %>

  <% if flash[:error] || flash[:errors] %>
    <p id="flash_errors" class="messages errors"><%= flash[:error] || flash[:errors] %></p>
    <%= javascript_tag "$('#flash_errors').effect('highlight',{},1000);" %>
  <% end %>

  <% flash[:error] = flash[:errors] = flash[:notice] = nil %>
</div>
票数 46
EN

Stack Overflow用户

发布于 2013-06-19 09:58:41

另一种方法是在partial的末尾使用flash.clear,如下所示:

代码语言:javascript
复制
<% if !flash.empty? %>
  <div class="flash-messages-container">
    <% flash.each do |name, msg| %>
      <% if msg.is_a?(String) && [:success, :info, :error, :warning].include?(name) %>
        <div class="flash-message" data-type="<%= name %>" >
          <%= msg %>
        </div>
      <% end %>
    <% end %>
  </div>
  <% flash.clear %>
<% end %>
票数 34
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4613952

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档