29

レイアウトで次のコードを使用して、2 種類のフラッシュ メッセージを表示しています。

    <% 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]) %>

どちらも問題なく動作しますが、いずれかがトリガーされると、追加のページ ビューが 1 つ表示されます。私はキャッシュジェムを使用していません。

なぜこうなった?どうすれば修正できますか?

4

1 に答える 1

66

flash.nowの代わりに使用しflashます。

このflash変数は の前に使用されることを意図しておりredirect、1 つのリクエストの結果のページに保持されます。これは、もし を行わずredirect、代わりに単にrenderページを作成した場合、flashメッセージは 2 つのリクエストの間存続することを意味します: レンダリングされたページに表示されますが、リダイレクト (つまり、2 番目のリクエスト) をまだ待っているため、メッセージは再び表示されます。リンクをクリックした場合。

この奇妙な動作を避けるために、リダイレクトではなくレンダリングするときに、flash.now代わりにflash.

このflash.nowオブジェクトはflash、レンダリングされたページにメッセージを表示するために使用されます。私の推測によると、予期しないランダムなメッセージを見つけた場合はflash、 に置き換えることで解決できflashますflash.now

それが役立つことを願っています:)

于 2013-09-11T17:59:49.530 に答える