29

我在布局中使用以下代码来显示两种类型的 Flash 消息:

    <% if !flash[:notice].nil? %>
    <div class="row">
        <div class="flash notice col-xs-12">
            <%= flash[:notice] %>
        </div>
    </div>
    <% end %>
    <% if !flash[:error].nil? %>
    <div class="row">
        <div class="flash error col-xs-12">
            <%= flash[:error] %>
        </div>
    </div>
    <% end %>

    <%= debug(flash[:notice]) %>
    <%= debug(flash[:error]) %>

它们都可以正常工作,但是每当触发一个时,它仍然会出现一个额外的页面视图。我没有使用任何缓存宝石。

为什么会这样?我该如何解决?

4

1 回答 1

66

使用flash.now而不是flash.

flash变量旨在在 a 之前使用redirect,并且它会在一个请求的结果页面上持续存在。这意味着如果我们不这样做redirect,而只是render一个页面,则flash消息将持续存在两个请求:它出现在呈现的页面上但仍在等待重定向(即第二个请求),因此消息将再次出现如果你点击一个链接。

为了避免这种奇怪的行为,在渲染而不是重定向时,我们使用flash.now而不是flash.

flash.now对象用于flash在渲染页面上显示消息。根据我的假设,如果您发现意外的随机flash消息,您可以通过替换来解决flashflash.now

希望有帮助:)

于 2013-09-11T17:59:49.530 回答