Rails 4:下一页视图的Flash消息仍然存在

eme*_*his 25 ruby ruby-on-rails ruby-on-rails-4

我在布局中使用以下代码来显示两种类型的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]) %>
Run Code Online (Sandbox Code Playgroud)

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

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

Raj*_*tan 57

flash.now而不是flash.

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

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

flash.now对象用于flash在呈现的页面上显示消息.按我的假设,如果你发现一个随机的flash消息,你就别指望了,您可以通过更换解决它flashflash.now.

希望有帮助:)

  • 凉.所以在我的控制器中,我应该做一些像`flash.now [:error] ='something'`的事情? (2认同)