【问题标题】:Rails 4: Flash message persists for the next page viewRails 4:Flash 消息在下一个页面视图中持续存在
【发布时间】:2013-09-11 17:54:44
【问题描述】:

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

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

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

【问题讨论】:

标签: ruby-on-rails ruby ruby-on-rails-4


【解决方案1】:

使用flash.now 代替flash

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

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

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

希望有帮助:)

【讨论】:

  • 酷。所以在我的控制器中我应该做类似flash.now[:error] = 'something' 的事情?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-07-05
  • 1970-01-01
  • 1970-01-01
  • 2013-01-23
  • 1970-01-01
  • 2015-03-14
  • 1970-01-01
相关资源
最近更新 更多