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消息,你就别指望了,您可以通过更换解决它flash用flash.now.
希望有帮助:)